qmail と daemontools

daemontools は qmail の作者 D.J.B. によるツール群のひとつです。 デーモンが不意に終了してしまった場合も、 自動的に立ち上げ直してくれるので安心です。 daemontools のインストールと基本的な使い方については、 daemontools によるプロセス監視を ご覧下さい。

ここでは、話を qmail に特化して、スクリプトの具体例などをあげます。 qmail は /var/qmail にインストールしてあるとして、 以下に出て来るディレクトリは /var/qmail/supervise の下にあるとします。 また、ログは multilog で取ることにします。


qmail-start

qmail/run

#!/bin/sh

#
# qmail/run : qmail-start starting script
#
exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start ./Maildir/

qmail/log/run

# chwon -p /var/qmail/supervise/qmail/log/main
# chown -R qmaill:qnofiles /var/qmail/supervise/qmail/log
#!/bin/sh

#
# qmail/log/run : qmail-start log starting script
#
exec env - PATH="/var/qmail/bin:/usr/local/bin:$PATH" \
setuidgid qmaill \
multilog t ./main -'*' +'* status: *' =status
最後の行は、全てのログを ./main 以下に、 status という文字列にマッチした場合は、 qmail/log/status に出力を保存する設定です。

qmail-smtpd

qmail-smtpd/run

qmail-smtpd を tcpserver 経由で起動することによってアクセス制御をし、 アクセス制御ファイルが /etc/tcp.smtp.cdb である場合です。
#!/bin/sh

#
# qmail-smtpd/run : qmail-smtpd starting script
#
exec env - PATH="/var/qmail/bin:/usr/local/bin:$PATH" \
tcpserer -HR -v -u 82 -g 81 -x /etc/tcp.smtp.cdb 0 \
smtp qmail-smtpd 2>&1
-u 82 -g 81 はユーザ qmaild のユーザ ID 番号と グループ(qnofiles) ID 番号です。 ports でインストールすると上記の番号になっています。

qmail-smtpd/log/run

# chwon -p /var/qmail/supervise/qmail/log/main
#!/bin/sh

#
# qmail-smtpd/log/run : qmail-smtpd log starting script
#
exec env - PATH="/var/qmail/bin:/usr/local/bin:$PATH" \
multilog t ./main -'*' +'* status: *' =status

qmail-apop

qmail-apop/run

qmapop を使って APOP 対応にしたものを、 APOP 強制で起動するときのスクリプトです。
#!/bin/sh

#
# qmail-apop/run : qmail-popup with APOP patch starting script
#
exec env - PATH="/var/qmail/bin:/usr/local/bin:$PATH" \
tcpserer -HR 0 pop3 qmail-popup host.name.domain \
checkpassword qmail-pop3d Maildir
host.name.domain にはメールサーバのフルネームを入れて下さい。

qmail-apop/log/run

# chwon -p /var/qmail/supervise/qmail/log/main
#!/bin/sh

#
# qmail-apop/log/run : qmail-apop log starting script
#
exec env - PATH="/var/qmail/bin:/usr/local/bin:$PATH" \
multilog t ./main -'*' +'* status: *' =status

Last modified: Wed Apr 20 16:05:21 JST 2011