2010年8月18日水曜日

自作デーモンプログラムを走らせる

どうも、俺@始業です。
今日はむかーしドコかのブログにメモったものを書き移します。

Linuxサーバにて自作プログラムをデーモンとして動かす方法についてです。
今回は例として外部サーバから80000ポートにTCP接続があればそのサーバのロードアベレージを返すデーモンプログラムを作成します。

まずはロードアベレージを返すプログラムを作成。
# vim call_loadavg.sh
#!/bin/sh
cat /proc/loadavg | awk '{ print $1 }'

# chmod +x call_loadavg.sh
出来ました。

これをデーモンに登録します。
# vim /etc/services
# 一番最終行にでも
call_loadavg 80000/tcp # my_daemon

// 新規作成
# vim /etc/xinetd.d/call_loadavg
service call_loadavg
{
 disable = no
 socket_type = stream
 wait = no
 user = root
 protocol = tcp
 server = /bin/sh
 server_args = /path/to/call_loadavg.sh
 log_on_failure += USERID
 port = 80000
# IP制限した場合は
only_from = x.x.x.x

}

この項目は
disable no...使用 yes...使用しない
socket_type stream...ストリーム型 dgram...データグラム型 raw...IPへ直接制御が必要な場合
wait yes...シングルスレッドで動作 no...マルチスレッドで動作
user 実行ユーザ名
protocol プロトコル
server 実行プログラム名
server_args 実行プログラムに渡される引数
log_on_failure サーバ起動、終了時に出力するログの種類(複数組み合わせ可)
 PID...プロセスID HOST...リモートホストアドレス USERID...リモートユーザのユーザID EXIT...サーバが終了したことを出力 DURATION...サービスセッションの時間
port プログラムが動作するポート番号
などです。詳しくはhttp://www.linux.or.jp/JM/html/xinetd/man5/xinetd.conf.5.htmlにて。

次にxinetdを再起動
# service xinetd restart
以上でぇぇえす。

0 件のコメント: