#contents *daemontoolsを使うメリット [#tcc85d56] -syslogと異なりログが確実に取れる -ログの容量を監視してくれる。ログのローテーションは日付ではなく、ある一定容量に達したかどうかによって行われる -サービスの追加・削除が簡単にできる。システム起動時に自動的に開始するか否かも簡単に指定できる -サービスを監視するためのロックファイルを作らなくて済む -デーモンのPIDを直接調べなくてもシグナルが送れる。daemontoolsを使って走らせた各デーモンはPIDではなく名前で指定でき、複数のデーモンにシグナルを送ることも可能 -起動するデーモンごとにlimitがかけられる。これにより、メモリ使用量やユーザー権限を制限できる 参考 http://www.unixuser.org/%7Eeuske/doc/daemontools/myfaq/faq-1.html#3 *インストール [#febfdfad] 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 *インストールの確認 [#b82a62e6] # 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スクリプトの置き換え [#oc62af40] 新規に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 &color(red){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の置き換え [#v4e1b4d8] # 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の置き換え [#ybfa68cd] # 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 # 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 *プロセスの停止と起動 [#u12ec1f0] 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コマンドで停止する必要がある *プロセスの削除 [#vbd8ba02] サブディレクトリを削除して再起動すれば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 *記録されたログの時間を読めるようにする [#a0c67f1a] TAI64N形式で記録されているのでこれを変換する # tai64nlocal < TAI64N形式で記録されたログファイル #exlink