実際に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.