daemontoolsからサービス起動方法

ここでは、qmailの作者であるD. J. Bernstein氏作のサービスの起動を行うツールのサービス起動方法について説明します。既にdaemontoolsのインストールが完了しているものとして説明しています。

daemontools経由で起動できるデーモン

daemontoolsはすべてのデーモンが管理できるということではありません。
フォアグランドで動作するもののみで、apacheなど起動するとバックグラウンドに移行するデーモンについては管理する事ができません。

qmail,tcpserverといったD. J. Bernstein氏作したデーモンはフォアグランドで動作しますので、ここでは qmail(qmailで apop の実装) を例にとって説明します。

daemontoolsの起動

daemontoolsを常駐させるために/etc/inittabに以下の行を追加します。

SV:12345:respawn:/usr/local/bin/svscanboot

とします。
上記の意味はランレベル1,2,3,4,5でプロセスが終了した場合は常に再起動するという意味になります。本来、ランレベル6の記述も必要なようですが私の環境では再起動(init 6)をすると上記の規制に引っかかり正常に再起動できませんでしたのでランレベル6は外しました。
解決方法知っている方教えてください。(^^;

また、inittabを有効にするため以下のコマンドを実行します。

# kill -HUP 1

これは、inittabがプロセスIDが必ず1になっているのでそれを再起動という意味です。

daemontoolsへの移行

大まかに手順としては以下の手順になります。
(1) /var/supervise/以下に動作させるサービスを管理するディレクトリを作成する
(2) /var/supervise/サービス名/以下に起動スクリプトをrunという名前で作成する
(3) /var/service/以下に作成した サービスを管理するディレクトリのシンボリックリンクを張る

それでは、実際にqmail(qmailで apop の実装)を例にとって説明します。

(1) qmailの設定

qmailのサービスを管理するディレクトリを作成を行います。

# mkdir /var/supervise/qmail

起動スクリプトをサービスディレクトリ以下に移動します。

# cp -p /var/qmail/rc /var/supervise/qmail/run

サービスディレクトリに対して、シンボリックリンクを作成します。

# ln -s /var/supervise/qmail /var/service/qmail

これで問題なければ、自動的にrunスクリプト実行され、qmailが起動します。svstatコマンドでサービスの起動状況を確認してください。

# svstat /var/service/qmail
/var/service/qmail: up (pid 6540) 24 seconds

と表示されれば問題ないでしょう。up時間が0や1秒でプロセスIDが変わる場合はスクリプトに誤りがある場合があります。再度runスクリプトの確認をしてください。

(2) smtpサーバの設定

smtpのサービスを管理するディレクトリを作成を行います。

# mkdir /var/supervise/smtp

起動スクリプト/var/supervise/smtp/runを以下の用に作成します。
daemontoolsで起動する際は&(バックグラウンド)の記述は外し、また|(パイプ)の処理も外す必要があります。
そのため、sploggerが利用できなくなるためログが取れなくなってしまいますがdaemontoolsにはログ機能もあります。
この機能については daemontoolsでログ管理(multilog) を参照下さい。

#!/bin/sh
exec env - PATH="/var/qmail/bin:/usr/local/bin:/bin:/usr/bin" \
envdir /etc/relay-ctrl relay-ctrl-chdir \
tcpserver -v -x /etc/tcp.smtp.cdb -R -H \
-u `/usr/bin/id -u qmaild` -g `/usr/bin/id -g qmaild` \
0 smtp relay-ctrl-check qmail-smtpd 2>&1

スクリプトに実行権を与えておきましょう。

# chmod 755 /var/supervise/smtp/run

サービスディレクトリに対して、シンボリックリンクを作成します。

# ln -s /var/supervise/smtp /var/service/smtp

これで問題なければ、自動的にrunスクリプト実行され、qmailが起動します。svstatコマンドでサービスの起動状況を確認してください。

# svstat /var/service/smtp
/var/service/smtp: up (pid 5534) 24 seconds

と表示されれば問題ないでしょう。up時間が0や1秒でプロセスIDが変わる場合はスクリプトに誤りがある場合があります。再度runスクリプトの確認をしてください。

(3) popサーバの設定

smtpのサービスを管理するディレクトリを作成を行います。

# mkdir /var/supervise/pop

起動スクリプト/var/supervise/pop/runを以下の用に作成します。
同じく&(バックグラウンド)の記述は外し、また|(パイプ)の処理も外す必要があります。

#!/bin/sh
exec env - PATH="/var/qmail/bin:/usr/local/bin:/bin:/usr/bin" \
envdir /etc/relay-ctrl relay-ctrl-chdir \
tcpserver -v -R -H 0 pop3 qmail-popup \
`/bin/cat /var/qmail/control/me` /bin/selectcheckpw \
relay-ctrl-allow qmail-pop3d Maildir 2>&1

スクリプトに実行権を与えておきましょう。

# chmod 755 /var/supervise/pop/run

サービスディレクトリに対して、シンボリックリンクを作成します。

# ln -s /var/supervise/pop /var/service/pop

これで問題なければ、自動的にrunスクリプト実行され、qmailが起動します。svstatコマンドでサービスの起動状況を確認してください。

# svstat /var/service/pop
/var/service/pop: up (pid 7512) 28 seconds

と表示されれば問題ないでしょう。up時間が0や1秒でプロセスIDが変わる場合はスクリプトに誤りがある場合があります。再度runスクリプトの確認をしてください。

daemontoolsのサービス停止/起動方法

サービスの停止/起動はsvcコマンドを利用します。

(1) 停止方法
svc -d /var/service/停止したいサービスディレクトリ

# svc -d /var/service/qmail

(2) 起動方法
svc -u /var/service/起動したいサービスディレクトリ

# svc -u /var/service/qmail

指定するディレクトリ名にはワイルドカードなども指定できます。

また、再起動後は/var/service/以下にあるサービスについては起動しますのでdownというファイルを作成したり、シンボリックリンクを外すことで起動しなくも出来ます。

# touch /var/service/qmail/down

その他svcのオプションには以下のものがあります。参考までに

-uサービスが動作していなければ起動し、サービスが終了したら再起動を実施
-oサービスが動作していなければサービス起動し、サービスが終了しても再起動はしない
-xサービスが終了したら、superviseも終了する
-tTERMシグナルでサービスを再起動する

サービスの状態の確認

登録しているサービスの状況を調べるには前項目でも説明しましたがsvstatコマンドを利用します。

書式)
svstat サービスディレクトリ名

# svstat /var/service/pop
/var/service/pop: up (pid 7512) 28 seconds

サービスディレクトリにはワイルドカードも利用できます。

# svstat /var/service/*
/var/service/pop: up (pid 7512) 28 seconds
/var/service/qmail: up (pid 7553) 28 seconds
/var/service/smtp: up (pid 7124) 28 seconds

これでdaemontoolsでの起動方法の説明は終了です。
multilogを利用したログ採集方法は daemontoolsでログ管理(multilog) を参考下さい。

marronおすすめの参考書 by Amazon
Q-Mail Q-Mail
Oreilly & Associates Inc / John R. Levine, Russell Nelson
¥ 3,965
The Qmail Handbook The Qmail Handbook
Apress / Dave Sill
¥ 5,021
Running Qmail (Sams White Book Series) Running Qmail (Sams White Book Series)
Sams / Richard Blum

Copyright(C) 2004-2006 マロンくん.NET ~サーバ管理者への道~ All Rights. Reserved.