2015年6月28日日曜日

Monitでプロセスを自動復旧させる


よくある話ですが、せっかくなのでInitスクリプトから作ってみました。

まずは対象のプログラムですが、下記のようにバックグラウンドで
スリープするだけのものを用意しました。

/tmp/sleep.sh

スクリプト内でプロセスID($!)を書き出しているところがポイントです。

次に上記のプログラムを起動するInitスクリプトです。
下記のように、それっぽく用意しました。
プログラム起動時にPIDファイルを引数として渡しています。

/etc/init.d/sleep

次の仕様に準じるところまでは作りこんでいません...
Linux Standard Base Core Specification, Generic Part
Chapter 22. System Initialization
22.2. Init Script Actions

最後にMonitの設定ファイルです。上述のPIDファイルを指定しています。

/etc/monit.d/sleep



準備ができたらMonitを再起動します。
# service monit restart
Shutting down monit:                                       [  OK  ]
Starting monit:                                            [  OK  ]
スリープのプロセスは、当然、指定の時間がくると終了するので、
下記のようにログから、Monitがそれを検知して起動していることがわかります。
# tail -f /var/log/monit
...
[JST Jun 28 16:27:48] error    : 'sleep' process is not running
[JST Jun 28 16:27:48] info     : 'sleep' trying to restart
[JST Jun 28 16:27:48] info     : 'sleep' start: /etc/init.d/sleep
[JST Jun 28 16:28:49] info     : 'sleep' process is running with pid 31169

0 コメント: