daemontools は qmail の作者 D.J.B. によるツール群のひとつです。
daemontools とは
daemontools とは、デーモンを監視するツールのことです。
デーモンが不意にストップしたとき、それは止まったままになります。
しかし daemontools によって監視させておけば、
自動的に再起動してくれます。
また、監視のためのディレクトリを作成するので、
デーモン管理が一元化されるなどの利点もあります。
具体的には svscan というプログラムが各サービスを
run (名前固定)というスクリプトで起動します。
注意事項は次の通りです。
- バックグラウンドになるデーモンは管理できません。
- 上のため、run で走らせるプロセスは、
& を付けてバックグラウンドにしてはいけません
インストール
ports でインストールできます。
# cd /usr/ports/sysutils/daemontools
# make install clean
|
FreeBSD 4.8-RELEASE 付属の ports コレクションでは、
daemontools-0.76 がインストールされます。
実行ファイルたちは /usr/local/bin 以下に、
起動サンプルは /usr/local/share/examples/daemontools 以下に
コピーされます。
サービスディレクトリの作成
サービスを管理するためのディレクトリを作ります。
デフォルトでは /servise に作ることになっています。
このディレクトリのサブディレクトリのさらに下に run という
サービスデーモンを起動するためのスクリプトを置くと、
デーモンを管理するプログラム supervise が自動的に
子プロセスとして起動します。
svscan の起動
# csh -cf '/usr/local/bin/svscanboot &'
|
で svscan を起動します。
ブート時の自動起動(方法その1)
上の1行を /etc/rc.local に追加しておきます。
ブート時の自動起動(方法その2)
services.sh のようなスクリプトを書き、
実行権を与えて /usr/local/etc/rc.d/ に置いておきます。
# cp /somewhere/services.sh /usr/local/etc/rc.d
# chmod 755 /usr/local/etc/rc.d/services.sh
|
サービスデーモンの起動
管理をしやすくするために、run の実体を別の場所に置き、
run はシンボリックとしておくのが一般的のようです。
例えば、qmail-start を動かすには次のようにします。
# mkdir /var/qmail/supervise
# mkdir /var/qmail/supervise/qmail
# vi /var/qmail/supervise/qmail/run
(/var/qmail/supervise/qmail/ に run という名前で qmail-send の起動スクリプトを置く)
|
下の方法でログを取ることを考慮した run スクリプトは、
Maildir 形式用なら次のようなものでいいでしょう。
#!/bin/sh
#
# qmail/run : qmail-start starting script
#
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/
|
qmail-smtpd, qmail-apop に対する run スクリプトの具体例は、
qmail と daemontoolsを
ご覧下さい。
run に実行権を与え、リンクを張ります。
# chmod +x /var/qmail/supervise/qmail/run
# ln -s /var/qmail/supervise/qmail /service/qmail
|
リンクを張ったら svscan によって5秒以内にサービスが開始されます。
ログをとる
daemontools パッケージには、ログを取るためのプログラム、
multilog が含まれています。
ここでは、multilog を使ったログの取り方を紹介します。
例として、上の qmail に対してログを取ってみましょう。
まずは、必要なディレクトリを作成します。
# mkdir -p /var/qmail/supervise/qmail/log/main
|
次に、スクリプトファイル log/run を作成します。
#!/bin/sh
#
# qmail/log/run : qmail log starting script
#
exec env - PATH="/usr/local/bin:/var/qmail/bin:$PATH" \
setuidgid qmaill \
multilog t ./main -'*' +'* status: *' =status
|
qmail-smtpd や qmail-apop のログに対する run スクリプトの具体例は、
qmail と daemontoolsを
ご覧下さい。
作成したら log/run に実行権を与え、ディレクトリのオーナーとグループを
ログ取得用ユーザ qmaill に変更しておきます。
# chmod +x /var/qmail/supervise/qmail/log/run
# chown -R qmaill:qnofiles /var/qmail/supervise/qmail/log
|
ログ付きの qmail-start を起動させます。
まず、qmail-start が動いていたら停止します。
# cd /service
# rm qmail
# svc -dx /var/qmail/supervise/qmail
|
/var/qmail/supervise/qmail/run スクリプトに変更が必要な場合は
変更します。
/service にリンクを張って起動させます。
# ln -s /var/qmail/supervise/qmail /service/qmail
|
run の変更
なんらかの都合で run スクリプトを変更しなければならなくなった場合、
run スクリプトを直接編集してはいけません。
編集中の run スクリプトが動いてしまうかもしれないからです。
そこで、run.new という新しいスクリプトファイルを用意して、
これを編集し、終ったら run と入れ換えます。
# cd /var/qmail/supervise/qmail
# cp -p ./run ./run.new
# vi run.new
# mv ./run.new ./run && svc -t /service/qmail
|
svc -t はサービスの終了命令です。
しかし、5秒以内に自動的に起動します。
サービスの確認と制御
svstat でサービスの状態を確認できます。
# svstat /service/qmail /service/qmail/log
/service/qmail b: up (pid xxxx) xxx seconds
/service/qmail/log: up (pid xxxx) xxx seconds
|
up となっていれば、起動しています。
svc というコマンドを使ってサービスを制御することができます。
- サービスの開始
- サービスの停止
- サービスの停止後 supervise を終了(ただし5秒以内に再起動する)
- サービスの停止後 supervise を終了し、再起動しないようにする
# rm /service/qmail
# svc -dx /var/qmail/supervise/qmail
|
- 全てのサービスの停止後 supervise を終了し svscan を終了する
# svc -dx /service/*
# svc -dx /service/*/log
# killall svscan
|
参考サイト
FreeBSD の部屋
Last modified: Wed Apr 20 15:30:20 JST 2011