qmailをdaemontoolsに登録する
qmailをdaemontoolsに登録する
0.改訂履歴
- 2006.02.09 新規作成
- 2006.02.15 微調整
- 2006.08.14 multilogに対応するように大幅に変更
1.はじめに
このドキュメントでは,qmailをdaemontoolsで管理するように設定する手順を説明する. このセットアップ方法では,前提としてサービスディレクトリを/var/serviceとして作成してdaemontoolsをインストールしていることを前提としている.また,daemontoolsのsvscanを使用してサービスの管理をする場合には,サービスディレクトリ(/var/service)以下にサブディレクトリを作成する事になるが,ここではシンボリックリンクを利用して設定する手順とする. また,後々にログ解析がしやすいようにmultilogに対応するようにしている.
2.設定と起動
[root@neptune qmail]# mkdir /var/qmail/supervise
[root@neptune qmail]# mkdir /var/qmail/supervise/qmail
[root@neptune qmail]# mkdir /var/qmail/supervise/qmail/log
[root@neptune qmail]# chmod +t /var/qmail/supervise/qmail
[root@neptune qmail]#
|
- ここでステッキービットを立て忘れた場合,ディレクトリの再作成から始めなければならない.
- qmailの起動スクリプトを格納するディレクトリに移動する.
[root@neptune supervise]# cd /var/qmail/supervise/qmail
[root@neptune qmail]#
|
コピペ用
mkdir /var/qmail/supervise
mkdir /var/qmail/supervise/qmail
mkdir /var/qmail/supervise/qmail/log
chmod +t /var/qmail/supervise/qmail
cd /var/qmail/supervise/qmail
|
[root@neptune qmail]# cat run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
exec /var/qmail/rc
[root@neptune qmail]#
|
- ここでは通常のqmailを起動するシェルを呼び出すだけとなっている.
- 次に,ログ記録用のmultilogの起動用シェルを作成する.
[root@neptune qmail]# pwd
/var/qmail/supervise/qmail
[root@neptune qmail]# cd log
[root@neptune log]#
[root@neptune log]# cat run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/service/qmail/log/main
[root@neptune log]#
|
- この例では,qmaillユーザでmultilogプロセスが起動され,/var/service/qmail/log/mainディレクトリ以下にログが記録されることとなる.
- 作成したrunファイルに実効権限を付ける.
[root@neptune log]# chmod ogu+x /var/qmail/supervise/qmail/run
[root@neptune log]# chmod ogu+x /var/qmail/supervise/qmail/log/run
[root@neptune log]#
|
コピペ用
chmod ogu+x /var/qmail/supervise/qmail/run
chmod ogu+x /var/qmail/supervise/qmail/log/run
|
- qmailの起動用シェルを編集して,sploggerを利用しないように書き換える.
変更前 |
[root@neptune log]# cat /var/qmail/rc
#!/bin/sh
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.
exec env - PATH="/var/qmail/bin:$PATH" ¥
qmail-start ./Maildir/ splogger qmail
[root@neptune log]#
|
変更後 |
[root@neptune log]# cat /var/qmail/rc
#!/bin/sh
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to ~/Mailbox by default.
exec env - PATH="/var/qmail/bin:$PATH" ¥
qmail-start ./Maildir/
[root@neptune log]#
|
[root@neptune log]# pwd
/var/qmail/supervise/qmail/log
[root@neptune log]# ls -la
total 12
drwxr-xr-x 2 root root 4096 Aug 14 15:21 .
drwxr-xr-t 3 root root 4096 Aug 14 15:19 ..
-rw-r--r-- 1 root root 102 Aug 14 15:21 run
[root@neptune log]# chown qmaill:nofiles `pwd`
[root@neptune log]# chmod 700 `pwd`
[root@neptune log]# mkdir main
[root@neptune log]# chown qmaill:nofiles main
[root@neptune log]#
|
- ここまでで準備は完了となる.
- daemontoolが監視をしているディレクトリに,シンボリックリンクを張る.
[root@neptune log]# ln -s /var/qmail/supervise/qmail /var/service/qmail
[root@neptune log]#
|
- このコマンドを実行して5秒以上経過したら,ステータスを確認してみる.
[root@orpheus service]# svstat /var/service/qmail /var/service/qmail/log
/var/service/qmail: up (pid 27323) 14 seconds
/var/service/qmail/log: up (pid 27328) 9 seconds
[root@orpheus service]#
|
コピペ用
chown qmaill:nofiles `pwd`
chmod 700 `pwd`
mkdir main
chown qmaill:nofiles main
ln -s /var/qmail/supervise/qmail /var/service/qmail
sleep 10
svstat /var/service/qmail /var/service/qmail/log
|
3.プロセスの確認
[root@neptune supervise]# ps -ef | grep qmail
root 2464 6466 0 15:59 ? 00:00:00 supervise qmail
qmails 2465 2464 0 15:59 ? 00:00:00 qmail-send
qmaill 2466 2465 0 15:59 ? 00:00:00 splogger qmail
root 2467 2465 0 15:59 ? 00:00:00 qmail-lspawn ./Maildir/
qmailr 2468 2465 0 15:59 ? 00:00:00 qmail-rspawn
qmailq 2469 2465 0 15:59 ? 00:00:00 qmail-clean
root 2490 12578 0 16:02 pts/1 00:00:00 grep qmail
[root@neptune supervise]#
|
- プロセスIDをみると,superviseプログラムによって起動されていることがわかる.
- superviseプログラムの親プロセスを確認してみる.
[root@neptune supervise]# ps -ef | grep 6466
root 6466 6464 0 Feb07 ? 00:00:00 svscan /var/service
root 2464 6466 0 15:59 ? 00:00:00 supervise qmail
root 2494 12578 0 16:03 pts/1 00:00:00 grep 6466
[root@neptune supervise]#
|
- superviseプロセスは,svscanプログラムによって起動されている事がわかる.
- qmailを停止してみる.
[root@neptune supervise]# ps -ef | grep qmail-send
qmails 2465 2464 0 15:59 ? 00:00:00 qmail-send
root 2496 12578 0 16:03 pts/1 00:00:00 grep qmail-send
[root@neptune supervise]# kill 2465
[root@neptune supervise]# ps -ef | grep qmail-send
qmails 2497 2464 0 16:03 ? 00:00:00 qmail-send
root 2503 12578 0 16:03 pts/1 00:00:00 grep qmail-send
[root@neptune supervise]#
|
- superviseプロセスによって,5秒以内に再起動されている事が確認できた.
- svstatコマンドを利用して,プロセスが稼働している時間を調べる.
- これを調べるためには,まずカレントディレクトリをサービスディレクトリに移動して実行する.
[root@neptune supervise]# cd /var/service
[root@neptune service]# which svstat
/usr/local/bin/svstat
[root@neptune service]# svstat qmail
qmail: up (pid 2497) 3704 seconds
[root@neptune service]#
|
- 3704秒稼働していることが確認できた.
- この秒数が1〜3秒くらい以上長くならない場合は,起動&異常終了を繰り返している可能性があるので,実行スクリプトやディレクトリ権限などを確認する.