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