ShellでLinuxサービスのDown監視
2007年1月30日Table of Contents
仕事で使っているLinuxが、なぜかたまにOS自体が落ちている模様。。。
いつも、「ま、いっか!」って感じで、電源長押しで強制的にリスタしてるんですが、さすがに・・・隔週くらいで起きると怖い。
ってことで、主要なサービスの起動状況をチェックするShellを作成。
多分、夜中にcronで実行しているバックアップ系のトラブルだとは思うんですが・・・・。
ってことで、メモx2
ShellでLinuxサービスのDownを監視する
#!/bin/sh # プロセス監視Shell LANG=C # ログファイル(絶対パス指定) LOG=/home/xxxx/service.log [ ! -w $LOG ] && echo "$LOG is not found" && exit 1 # 監視サービス(サービス名リスト) # 半角SP区切りでサービス名を入れてください(grepコマンドでプロセス監視の為) SERVICE="postgres mysql smb httpd proftpd sshd" for i in $SERVICE do # 各サービスのデーモン起動数をチェック(grepを除外) isAlive=`ps -ef | grep $i | grep -v grep | wc -l` # サービスの状態をログへ保存 if [ $isAlive = 0 ]; then date=`date +"%Y/%m/%d %T"` echo "Service Down [ $i ]: $date" >> $LOG #ここで再起動・・・っていう手もありますね fi done exit 0
って感じでShellScriptを作成後、[ check_service.sh ]って感じの名前で保存。
あとは、cronに登録すればダウンしているサービスがあれば、以下のような感じでログを吐き出してくれます。
cron登録
↑のShellの実行権限、ファイルの書き込み権限あたりは、適宜調整して下さい
$crontab -e 0,20,40 * * * * sh /home/xxxx/check_service.sh
エラーログ例
基本的に、ダウン後の「再起動」はやってません。
必要なら、コメントの欄でリスタするっていう方法もあります。
エラーログはこんな感じ・・・
Service Down [ mysql ]: 2007/01/30 15:13:24 Service Down [ postgresql ]: 2007/01/30 15:13:24
サービスがダウンした時間を知りたい場合は、cronのローテーションをもう少し早くすればいいかもしれません。
while true で無限ループを使って監視も可能なんですけど、今回は使用しませんでした。開発用なので。