最強のMTA!qmail を使おう!(その7)

スクリプトから起動する

qmailを起動する方法は、3通りほどある。
1つめは、inet.dを利用する方法だが、推奨されていないので、説明しない。
2つめは、起動スクリプトと、tcpserver(ucspi-tcpに含まれる)を使う方法。
これでも、十分だが、qmailが、プロセスIDを、出力しないので、停止のスクリプトが少々怪しい。
プロセスを間違って殺す可能性が0では、ないかな・・・・。
しかし、うまい方法がありました。プロセスIDは、全て求められるのだった(難しい)。
3つめは、daemontoolsから起動する方法で、この方が、わかり易い。

まず、/var/qmail/rc を作成する。
/var/qmail/boot の中にテンプレートがあるので、それをコピーして変更する。
通常は、homeを、dot-forwardを使う場合は、home+dfを、コピーする。
cp /var/qmail/boot/home /var/qmail/rc
vi などで、./Mailboxを、./Maildir/ に変更する。(/を忘れずに!)
ここで、この方法を使うと、qmailが、メモリーを食いつぶすバグに引っかかる時がある。
回避するには、qmail-smtpdを加工する。
cd /var/qmail/bin
mv qmail-smtpd qmail-smtpd2
として、
vi qmail-smtpd
で、メモリー制限付きスクリプトを書く。
#!/bin/sh
ulimit -d 2048
exec /var/qmail/bin/qmail-smtpd2 ${1+"$@"}
こんな感じで、作り、
chmod +x qmail-smtpd
とする。
次に、起動、停止スクリプトを作成する。
注意1:1007は、qmaildのuid 1003 は、nofilesのgid である。
注意2:ml.hasiru.netには、自分のメールサーバ名を書くこと。
注意3:solaris2.6では、mkdir /var/runが必要。

#!/bin/sh
#
# qmail start stop script
#
# Copyright(c) by R.Ooyama
#
# qmail: /var/qmail
# pidfiles:  /var/run
#
[ -f /var/qmail/rc ] || exit 0

PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
SENDPID=/var/run/qmail-send.pid
SMTPPID=/var/run/qmail-smtpd.pid
POP3DPID=/var/run/qmail-pop3d.pid
export PATH SENDPID SMTPPID POP3DPID

case "$1" in
  start)
        # Start qmail
        if [ ! -f "$SENDPID" ]
        then
          echo "Starting qmail-send."
          sh -c 'echo $$ >$SENDPID; exec /var/qmail/rc' &
        fi
        if [ ! -f "$SMTPPID" ]
        then
          echo "Starting qmail-smtpd."
          sh -c 'echo $$ >$SMTPPID; \
            exec tcpserver -v -R -p -l ml.hasiru.net -u 1007 -g 1003 \
            -x /etc/tcp.smtp.cdb 0 smtp qmail-smtpd 2>&1' | splogger smtpd &
        fi
        if [ ! -f "$POP3DPID" ]
        then
          echo "Starting qmail-pop3d."
          sh -c 'echo $$ >$POP3DPID; \
            exec tcpserver -v -R -H -l ml.hasiru.net 0 pop3 \
            qmail-popup ml.hasiru.net checkpassword \
            qmail-pop3d Maildir 2>&1' | splogger pop3d &
        fi
        ;;
  stop)
        # Stop qmail
        if [ -f "$POP3DPID" ]
        then
          echo "Stutting down qmail-pop3d."
          pid=`cat $POP3DPID`
          kill -TERM $pid
          rm $POP3DPID
        fi
        if [ -f "$SMTPPID" ]
        then
          echo "Stutting down qmail-smtpd."
          pid=`cat $SMTPPID`
          kill -TERM $pid
          rm $SMTPPID
        fi
        if [ -f "$SENDPID" ]
        then
          echo "Shutting down qmail-send."
          pid=`cat $SENDPID`
          /bin/kill -TERM $pid
          rm $SENDPID
        fi
        ;;
   *)
        echo "Usage: qmail.sh {start|stop}"
        exit 1
esac

exit 0

私は、こんな感じで、作成した。
FreeBSDの場合、これを、
/usr/local/etc/rc.d/qmail.sh
として作成し、chmod +x qmail.sh
としておく。
Solarisの場合は、/etc/init.d/qmailとして、作成し、実行権をたてて、/etc/rc0.d /etc/rc1.d /etc/rc3.d
あたりに、KXXqmail SXXqmail などという感じのリンクを作っておく。(XXは、適当な2桁の番号)
Linuxでは、/etc/rc.d/init.d rc0.d rc1.d rc2.d rc3.d rc4.d rc5.d で、同様に作る。

これで、qmail pop3dともに起動するようになった。
手動で起動するには、
cd /usr/local/etc/rc.d
./qmail.sh start
もしくは、
cd /etc/init.d
./qmail start

などと、打てば良い。

前へ  次へ