万が一サービスが停止したときにサービスを自動的に再開させる方法

万が一何らかの理由でサービスが停止したときでも、サービスが停止しないよう自動的に再開させるようにするには、以下のようなスクリプトを作成し、サービスを監視することにより、自動的に再開を行えるようになります。
  1. 任意のファイル名の監視用スクリプトを作成し以下のプログラムを入力します。

  2. 例)vi /usr/local/mta/bin/watchdog.sh
    #!/bin/sh

    while :
    # echo "watchdoc services ..."
    do
    for x
    do
    # echo $x
    service $x status | grep "not" && service $x start # || echo " safe."
    done
    sleep 120
    done

  3. スクリプトに実行権を与えます。

  4. chmod 0755 /usr/local/mta/bin/watchdog.sh

  5. スクリプトをバックグラウンドで実行します。引数は監視したいサービス名を半角スペースにて羅列します。

  6. smtpサービスのみの監視の場合)/usr/local/mta/bin/watchdog.sh epstrd epstdd &
    smtp/pop3サービスの監視の場合)/usr/local/mta/bin/watchdog.sh epstrd epstdd epstpop3d &
    smtp/imap4サービスの監視の場合)/usr/local/mta/bin/watchdog.sh epstrd epstdd epstimap4d &
    smtp/pop3/imap4サービスの監視の場合)/usr/local/mta/bin/watchdog.sh epstrd epstdd epstpop3d epstimap4d &

  7. 動作確認のため監視しているサービスを一旦停止させます。

    例)epstrdを停止
  8. service epstrd stop

  9. しばらく待つと(スクリプトの設定では120秒間隔)監視時間に停止しているサービスが開始されます。

  10. epstrd is not running.(epstrdのサービスが停止していることを発見)
    Starting epstrd.   (epstrdのサービスを開始)

  11. 監視スクリプトの停止は、"ps ax | grep watchdog.sh" を実行し対象のプロセスをkillします。(以下は実行例)

  12. ps ax | grep watchdog.sh
    2957 0 I 0:00.01 /bin/sh ./watchdog.sh epstrd epstdd epstpop3d epstimap4d
    kill 2957