C 言語で単純な TCP サーバを作って demontools でデーモン化してみます。
※ demontools を使う機会があったので備忘録を兼ねています。
TCPサーバ
#include <stdio.h> #include <sys/types.h> #include <sys/socket.h> #include <netinet/in.h> int main(){ int sockfd, sock_size, sock; struct sockaddr_in server; struct sockaddr_in client; /* ソケット作成 */ sockfd = socket(AF_INET, SOCK_STREAM, 0); server.sin_family = AF_INET; server.sin_port = htons(8888); server.sin_addr.s_addr = INADDR_ANY; /* ソケットにポート番号割り当て */ bind(sockfd, (struct sockaddr *)&server, sizeof(server)); /* 割り当てたポート番号へ接続が作成できることをシステムに伝える */ listen(sockfd, 5); /* 接続要求を受ける度にソケットを新しく取得 */ while(1){ sock_size = sizeof(client); sock = accept(sockfd, (struct sockaddr *)&client, &sock_size); write(sock, "TEST\n", 5); /* クライアントとの接続をクローズ */ close(sock); } close(sockfd); return 0; }
エラー処理は省いています。
適当なディレクトリにコンパイルしてください。
# ディレクトリ移動 cd /usr/local/bin vi main.c =================== *上記コード =================== # コンパイル gcc main.c -o simple-server
demontools
demontools の設定です。
# demontoolsの導入 mkdir -p /package chmod 1755 /package cd /package wget http://cr.yp.to/daemontools/daemontools-0.76.tar.gz gunzip daemontools-0.76.tar tar -xpf daemontools-0.76.tar rm -f daemontools-0.76.tar cd admin/daemontools-0.76 cd src/ # ヘッダファイル修正 vi error.h ======================= extern int errno; ↓ #include <errno.h> ======================= # インストール cd .. package/install # centos7 では使用しないのでコメントアウト vi /etc/inittab ======================= #SV:123456:respawn:/command/svscanboot ======================= # サービスファイル作成 vi /etc/systemd/system/demontools.service ====================================================== [Unit] Description=run demontools during boot After=network.target [Service] User=root Group=root Type=simple RemainAfterExit=yes ExecStart=/command/svscanboot Restart=always LimitNOFILE=20480 [Install] WantedBy=multi-user.target ====================================================== # プロセスのデーモン化 mkdir /service/simple-server/ vi /service/simple-server/run ====================================================== #!/bin/sh exec /usr/local/bin/simple-server ====================================================== # ログ出力設定 mkdir /service/simple-server/log/ mkdir /var/log/simple-server vi /service/simple-server/log/run ============================================== #!/bin/sh exec /usr/local/bin/multilog t /var/log/simple-server ============================================== # 権限変更 chmod 755 /service/simple-server/run chmod 755 /service/simple-server/log/run # demontools 起動/自動起動設定 systemctl start demontools systemctl enable demontools