概要
プロセスの自動再起動に便利なmonit。
使い方について昔学んだことをまとめておく。
monitへの監視設定追加の流れ
- monitの監視対象となっているプロセスを確認
- monitの監視対象とするプロセスの設定を追加
- monitの設定を読み込ませる
- monitの監視対象となっているプロセスを確認
- 対象プロセスをキルして動作確認
1. monitの監視対象となっているプロセスを確認
sudo monit summary
=>
表示例
Process 'XXX' Running # 設定がmonitに認識されている & 監視対象 & 動作している
Process 'YYY' Initializing # 設定がmonitに認識されている & 監視対象 & 動作している(初回監視間隔をむかえていない?)
Process 'ZZZ' Not monitored # 設定はmonitに認識されている & 監視対象外 & 動作しているかは不明
Process 'AAA' Does not exist # 設定はmonitに認識されている & 監視対象 & 動作していない
上記に表示されていないプロセスについてはmonitに設定を追加する必要がある。
※上記コマンドで出てこない場合は、以下の設定がないことが原因かもしれない。
自分が触っていたEC2は実際そうだった。
参考:monit: error connecting to the monit daemon
2. monitの監視対象とするプロセスの設定を追加
# 各プロセスの設定ファイル格納ディレクトリへ移動
cd /etc/monit/conf.d
# monit監視対象に新規追加したいプロセスの設定ファイルを作成
sudo vi <プロセス名>.conf
# 編集して保存
---
# pidfileの有無で<プロセス名>のプロセス起動を監視
check process <プロセス名> with pidfile "<対象プロセスのpidファイルのパス>"
# <プロセス名>起動コマンド(起動に30秒かかったらタイムアウト)
start program = "<起動コマンド>" with timeout 30 seconds
# <プロセス名>停止コマンド(停止に20秒かかったらタイムアウト)
stop program = "<停止コマンド>" with timeout 20 seconds
---
3. monitの設定を読み込ませる
sudo monit reload
4. monitの監視対象となっているプロセスを確認(設定の読み込み確認)
※1.と同様
sudo monit summary
で確認し、監視対象プロセスが一覧に表示されるようになれば読み込まれている。
5. 動作確認
# プロセスを殺す
kill <対象プロセスのPID>
set daemonで設定されている秒数を待ったのちに
ps aux | grep <プロセス>
でプロセスが存在するようになればOK
monitでの自動起動設定追加
/etc/monit/conf.d/
以下に設定ファイルを作成する(ファイル名はなんでもいい)
ex. unicornをmonit監視下におく
※check process は summaryに表示される名称になる
check process unicorn_process
with pidfile "<unicornのpidファイルのパス>"
start program = "<起動コマンド>" with timeout 30 seconds
stop program = "<終了コマンド>" with timeout 20 seconds
group <グループ名>
を設定ファイルに追加した後
sudo service monit restart
補足:monitコマンドのその他オプション
monitのバージョンを知る
sudo monit -V
monitに認識されているプロセスについて監視対象にする、監視対象外にする
# 監視対象にする
sudo monit monitor <プロセス名(summaryで表示されるやつ)>
# 監視対象外にする
sudo monit unmonitor <プロセス名(summaryで表示されるやつ)>
補足:設定ファイル解説
monitrc
# 監視間隔の設定(以下は2分間隔の場合)
set daemon 120 # check services at 2-minute intervals
# monitのログファイルパス
set logfile /var/log/monit.log
# 外部の設定ファイルを読み込む場合のパス
include /etc/monit/conf.d/*