daemontoolsを使うメリット

  • syslogと異なりログが確実に取れる
  • ログの容量を監視してくれる。ログのローテーションは日付ではなく、ある一定容量に達したかどうかによって行われる
  • サービスの追加・削除が簡単にできる。システム起動時に自動的に開始するか否かも簡単に指定できる
  • サービスを監視するためのロックファイルを作らなくて済む
  • デーモンのPIDを直接調べなくてもシグナルが送れる。daemontoolsを使って走らせた各デーモンはPIDではなく名前で指定でき、複数のデーモンにシグナルを送ることも可能
  • 起動するデーモンごとにlimitがかけられる。これにより、メモリ使用量やユーザー権限を制限できる

参考 http://www.unixuser.org/%7Eeuske/doc/daemontools/myfaq/faq-1.html#3

インストール

http://cr.yp.to/daemontools/install.html から daemontools-0.76.tar.gz をゲット

# mkdir -p /package
# chmod 755 /package
# chmod +t /package
# cd /package
# tar xvpfz /usr/local/src/daemontools-0.76.tar.gz
# cd admin/daemontools-0.76
# ./package/install 

RedHat9でエラーが出る場合はパッチをあててみよう
http://www.qmail.org/moni.csi.hu/pub/glibc-2.3.1/
これで以下のものができる

  • 新たに作成されるディレクトリ
    /service
    /command
  • 作成されるファイルおよびそのシンボリックリンク
    /package/admin/daemontools/command/下に実行ファイル
    /command/下にそのシンボリックリンク
    /usr/local/bin/下にさらにシンボリックリンク

また、/etc/inittabファイルの末尾に次の1行が追加される

SV:123456:respawn:/command/svscanboot 

インストールの確認

# ps ax | grep svscan

以下のように表示されればOK

24886 ? S 0:00 /bin/sh /command/svscanboot
24888 ? S 0:00 svscan /service
24957 pts/2 S 0:00 grep svscan

日付処理の確認
下のように左と右で同じならばOK

# date | tai64n | tai64nlocal
2002-07-05 11:44:24.382558500 2002年 7月 5日 金曜日 11:44:24 JST
# date | sh -c 'multilog t e 2>&1' | tai64nlocal
2002-07-05 11:44:37.138256500 2002年 7月 5日 金曜日 11:44:37 JST

rcスクリプトの置き換え

新規にsuperviseでプロセスを起動したい場合、/serviceディレクトリにサブディレクトリを作りスティッキービットを立てる作業を瞬時に行なう必要があるので、まず/var/qmail/serviceで作業し、後から/serviceにシンボリックリンクを張ることにする

# mkdir -p /var/qmail/services/qmail/log
# chmod +t /var/qmail/services/qmail

runスクリプトを作成

# vi /var/qmail/services/qmail/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
exec /var/qmail/rc
# vi /var/qmail/services/qmail/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t s8000000 n50 /var/log/qmail

multilogのtオプションはTAI64N形式のタイムスタンプを付けるということデフォルトでは、ファイルサイズが99999bytesになるとファイルのローテーションを行い、最大ファイル数10以上になった場合は、古いものから削除される最大ファイルサイズ、最大ファイル保持数を変更するには次のように記述する

exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t sサイズ nファイル数 /var/log/qmail
(ファイルサイズは4096〜16777215の間で指定)
# chmod +x /var/qmail/services/qmail/run
# chmod +x /var/qmail/services/qmail/log/run

/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

splogger qmail の部分を削除

ログ出力先の作成

# mkdir /var/log/qmail
# chown qmaill.nofiles /var/log/qmail
# chmod 700 /var/log/qmail

シンボリックリンクを張ってqmailの起動

# /etc/rc.d/init.d/qmaild stop
# ln -s /var/qmail/services/qmail /service/qmail

起動確認

# svstat /service/qmail
/service/qmail: up (pid 27228) 287 seconds
# svstat /service/qmail/log
/service/qmail/log: up (pid 25310) 769 seconds

uptimeが0や1を繰り返している場合は起動に失敗しているのでこれまでのことを見直して反省した後、修正する

qmail-smtpdの置き換え

# mkdir -p /var/qmail/services/smtpd/log
# chmod +t /var/qmail/services/smtpd

runスクリプトを作成

# vi /var/qmail/services/smtpd/run
#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
tcpserver -H -R -v -u qmaild -g nofiles -x /etc/tcp.smtp.cdb \
0 smtp /var/qmail/bin/qmail-smtpd 2>&1

tcpserverのオプション参考サイト
http://www.emaillab.org/djb/tcpserver/options.html

# vi /var/qmail/services/smtpd/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmails /usr/local/bin/multilog t s5000000 n20 /var/log/smtpd
# chmod +x /var/qmail/services/smtpd/run
# chmod +x /var/qmail/services/smtpd/log/run

ログ出力先の作成

# mkdir /var/log/smtpd
# chown qmails.nofiles /var/log/smtpd
# chmod 700 /var/log/smtpd

シンボリック作成と起動確認

# ln -s /var/qmail/services/smtpd /service/smtpd
# svstat /service/smtpd/
/service/smtpd/: up (pid 27345) 4 seconds
# svstat /service/smtpd/log
/service/smtpd/log: up (pid 27346) 8 seconds

qmail-pop3dの置き換え

# mkdir -p /var/qmail/services/pop3d/log
# chmod +t /var/qmail/services/pop3d

runスクリプトを作成

# vi /var/qmail/services/pop3d/run

qmail単体で使っている場合

#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
exec tcpserver -v 0 pop3 /var/qmail/bin/qmail-popup [サーバのFQDN] \
/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1

vpopmailを使っている場合

#!/bin/sh
PATH=/var/qmail/bin:/usr/local/bin:/bin:/usr/bin
exec tcpserver -v 0 pop3 /var/qmail/bin/qmail-popup [サーバのFQDN] \
/home/vpopmail/bin/vchkpw /var/qmail/bin/qmail-pop3d Maildir 2>&1 
# vi /var/qmail/services/pop3d/log/run
#!/bin/sh
exec /usr/local/bin/setuidgid qmailp /usr/local/bin/multilog t s2000000 n20 /var/log/pop3d
# chmod +x /var/qmail/services/pop3d/run
# chmod +x /var/qmail/services/pop3d/log/run

ログ出力先の作成

# mkdir /var/log/pop3d
# chown qmailp.nofiles /var/log/pop3d
# chmod 700 /var/log/pop3d

シンボリック作成と起動確認

# ln -s /var/qmail/services/pop3d /service/pop3d
# svstat /service/pop3d
/service/pop3d: up (pid 27404) 5 seconds
# svstat /service/pop3d/log
/service/pop3d/log: up (pid 27405) 10 seconds

プロセスの停止と起動

qmail-pop3dを停止する場合

# svc -d /service/pop3d
# svstat /service/pop3d
/service/pop3d: down 2 seconds, normally up

qmail-pop3dを起動する場合

# svc -u /service/pop3d

停止していてもサーバーを再起動させるとまた動いてしまうので、停止させておきたい場合はdownファイルを作成する

# touch /service/pop3d/down

すでにプロセスが立ち上がっている場合はsvcコマンドで停止する必要がある

プロセスの削除

サブディレクトリを削除して再起動すればOKだが、そりゃできん!という場合は以下のようにする

サービスの停止

# svc -d /service/pop3d/log
# svc -d /service/pop3d

サービスのサブディレクトリの名前変更

# mv /service/pop3d /service/.pop3d

superviseを終了させる

# svc -x /service/.pop3d/log
# svc -x /service/.pop3d

確認して以下のようなメッセージが出ればOK

# svstat /service/.pop3d
/service/.pop3d/log: supervise not running

記録されたログの時間を読めるようにする

TAI64N形式で記録されているのでこれを変換する

# tai64nlocal < TAI64N形式で記録されたログファイル

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2005-12-13 (火) 18:58:37 (4932d)