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