UJP - 技術情報1

Life is fun and easy!

不正IP報告数

Okan Sensor
 
メイン
ログイン
ブログ カテゴリ一覧

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.設定と起動

  • qmail用のサブディレクトリを作成する.
[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.プロセスの確認

  • qmailのプロセスを確認する.
[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秒くらい以上長くならない場合は,起動&異常終了を繰り返している可能性があるので,実行スクリプトやディレクトリ権限などを確認する.


広告スペース
Google