検索
連載

daemontoolsによるロギングとプロセス監視実用qmailサーバ運用・管理術(9)(2/3 ページ)

syslogを使ったロギングにはいくつかの欠点がある。そこで、ロギングやプロセス監視を行ってくれるdaemontoolsを導入しよう。これにより、システムをより強力なものにできる。

Share
Tweet
LINE
Hatena

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.

ページトップに戻る