実際にqmailの起動をrc起動スクリプトから置き換えてみましょう。基となるrcスクリプトには次のものを使います。POP Before SMTPやIMAP4、vpopmailなどさまざまなアドオンパッケージをインストールし、rc起動スクリプトも複雑になってきていますが、svscanへの移行方法はほとんど変わりません。tcpserverを併用することも当然可能です。
start) |
基になるrc起動スクリプト |
上記のrc起動スクリプトに代表されるように、大抵のものは以下の3つのセクションで構成されます。
(1)/var/qmail/rcの起動
(2)qmail-smtpdの起動
(3)qmail-pop3dまたはそのほかのpop3d/imapdの起動
svscanへの置き換え、ロギング機能の強化の手順は3つのセクションでほぼ共通して行えます。では順を追って見ていきましょう。
必要なディレクトリを用意します。前述のように、直接/serviceディレクトリで作業を行わず/var/qmail/serviceで準備することにします。
# mkdir /var/qmail/services |
次にrunスクリプトを作成し、実行権を設定します。
#!/bin/sh |
/var/qmail/services/qmail/run |
#!/bin/sh |
/var/qmail/services/qmail/log/run |
# chmod +x /var/qmail/services/qmail/run |
multilogを使用する際、既存のsploggerを使用しないように、rcスクリプト中の余分な記述を削除する必要があります。sploggerの記述を削除した/var/qmail/rcは次のようになります(sploggerの指定がない場合は作業を省略できます)。
#!/bin/sh |
/var/qmail/rc |
ここでのログの作成はqmaillユーザーが行うようにするため、setuidgidコマンドに「qmaill」を引数として渡します。setuidgidはそのつづりのとおり、引数で渡されたアカウントのUIDとGIDで別のプログラムを起動します。
multilogの引数には、ログ各行の先頭にTAI64N形式のタイムスタンプを付けるように「t」を指定し、次に出力先を指定します。multilogのデフォルトでは、ファイルサイズが99999bytesになるとファイルのローテーションを行い、最大ファイル数10まで保管します。それ以上になった場合は、古いものから削除します。
最大ファイルサイズ、最大ファイル保持数を変更するには次のようにします。
# multilog t sサイズ
nファイル数 /var/log/qmail |
注:ファイルサイズは4096〜16777215の間で指定します。なお、ログを意味のないところで切らないために、最大ファイルサイズの最後の2000bytes以内に改行コードがあった場合にのみ、ログファイルのローテーションを行います |
multilogのそのほかの引数については、http://www.emaillab.org/djb/tools/daemontools/multilog.htmlを参照してください。
次にログの出力先を作成し、適切なパーミッションを設定します。ここでのログ出力は、オーナーを「qmaill」、グループを「nofiles」にしておきます。
# mkdir /var/log/qmail |
以上の作業がすべて完了した時点で、/serviceにシンボリックリンクを作成します。間髪を入れずにqmailがsuperviseの監視下で動作していることが分かります。
# ln -s /var/qmail/services/qmail
/service/qmail |
「ps -aef | grep qmail」などで確認 |
svstatコマンドを使用しても起動の確認が行えます。
# svstat /service/qmail |
uptimeが0や1を繰り返している場合は、runスクリプトの起動に失敗していることが考えられるので、/var/qmail/logに作成されたログを頼りにタイプミスなどがないか確認します。
次に、rc起動スクリプトのセクション(2)を置き換えましょう。同様の作業を繰り返します。
起動ディレクトリを用意します。
# mkdir /var/qmail/services/smtpd |
runスクリプトを準備します。ログの作成はqmailsユーザーで行うようにします。
#!/bin/sh |
/var/qmail/services/smtpd/run 注:| /var/qmail/bin/splogger smtpd 3 &は削除 |
#!/bin/sh |
/var/qmail/services/smtpd/log/run |
# chmod +x /var/qmail/services/smtpd/run |
ログの出力先を準備します。
# mkdir /var/log/smtpd |
作業が完了したら/serviceにシンボリックリンクを作成し、プロセスのステータスを確認します。
# ln -s /var/qmail/services/smtpd
/service/smtpd |
最後にセクション(3)を置き換えましょう。同じように、起動ディレクトリを準備します。
# mkdir /var/qmail/services/pop3d |
runスクリプトを用意し、スクリプトに実行権を設定します。ログの作成はqmailpユーザーで行うようにします。
#!/bin/sh |
/var/qmail/services/pop3d/run 注:| /var/qmail/bin/splogger pop3d 3 &は必要なし |
#!/bin/sh |
/var/qmail/services/pop3d/log/run |
# chmod +x /var/qmail/services/pop3d/run |
ログの出力先を作成し、オーナーとパーミッションを設定します。
# mkdir /var/log/pop3d |
/serviceにシンボリックリンクを張り、起動を確認します。
# ln -s /var/qmail/services/pop3d
/service/pop3d |
ほぼ同じ作業を3回こなすことで、置き換えのコツもつかめてきたと思います。ディレクトリの作成やパーミッションの設定は多少手間ですが、それによって得られる恩恵は手間以上のものです。
superviseでプロセスの監視を行うメリットとして、プロセスの起動や停止が簡単に行えることが挙げられます。プロセスを一時的に停止し、その後再開するような場合はsvcコマンドを次のように使用します。
# svc -d /service/サービス |
停止させる場合 |
# svc -u /service/サービス |
開始する場合 |
この場合でも、サーバが再起動してしまうとsvscanが/serviceディレクトリを探索し、一時停止されていたサービスを再び起動します。サーバ再起動後もサービスを停止しておくには「/service/サービス」ディレクトリに「down」というファイルを作成します。中身は空のままで構いません。
# touch /service/サービス/down |
この方法でプロセスを停止できるのはsvscan起動時のみで、プロセスがすでに立ち上がっている場合はsvcコマンドを使用することを忘れないでください。
一時停止でsvstatを実行すると、次のような結果が返ってくるはずです。
# svstat /service/サービス |
プロセスが二度と起動されないようにする(サービスを削除する)には、/serviceディレクトリからサービスを定義したサブディレクトリを削除し、サーバを再起動するのが最も簡単です。ただし、サービスを提供しているサーバを簡単に再起動することはできません。そこで、次の手順を取ります。
まず、先ほどの一時停止の手段でサービスを停止します。次に、サービスを定義したサブディレクトリの名前を「.」(ピリオド)で始まるものに変更します。その後、superviseに終了シグナルを送ります。前半のqmail-pop3dを例に取ると、次のようになります。
# svc -d /service/pop3d/log |
# mv /service/pop3d
/service/.pop3d |
# svc -x /service/.pop3d/log |
-xオプションは、superviseに対して監視しているプロセスが終了次第supervise自身も終了するように指示するものです。この状態でのsvstatの結果は次のようになります。
# svstat /service/.pop3d |
Copyright © ITmedia, Inc. All Rights Reserved.