ShellでLinuxサービスのDown監視

2007年1月30日 オフ 投稿者: KYO
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 で無限ループを使って監視も可能なんですけど、今回は使用しませんでした。開発用なので。