サービスが停止していると、業務システムの障害やユーザー影響につながります。特に監視ツール自体がダウンすると、そもそも監視ができなくなります。このような時は簡易スクリプトでの死活監視が便利です。本記事では、Linux上で特定サービスを定期的に監視し、落ちていたら自動起動するスクリプトを紹介します。
スクリプトの概要
- プロセスが存在するかをpsコマンドで確認(ここではnagiosのプロセスを想定)
- ログ出力で監視の結果を確認できるようにする
- 停止していた場合は
systemctl start <サービス名>を実行 - 停止していた場合はメールでも通知を行う
- スクリプトは
/usr/local/sbin/など任意の場所へ配置 - cronで定期的に実行
という内容でスクリプトを作成します。
スクリプトの内容
作成したスクリプト(nagios-service-sheck.sh)の内容は以下になります。
#!/bin/bash
result=$(ps -ef | grep ^nagios 2>/dev/null)
if [ -z "$result" ]; then
logger "nagiosのサービスがダウンしていますので、起動します。"
systemctl start nagios
echo "nagios is down!" | mail -s "nagios is down!" admin@dassyi.com
else
logger "nagiosのサービスチェック OK"
# echo "$result"
fi
cronで定期的に実行
上記スクリプトを/usr/local/sbin/ など任意の場所へ配置し、パーミッションを700にしておきます。
その上で、cronで定期的に実行するようにセットします。以下は毎時30分にチェックする設定例です。
# crontab -e
30 * * * * /usr/local/sbin/nagios-service-sheck.sh > /dev/null 2>&1
動作確認
動作確認を実施します。まずは定期的に(上記の例の場合は毎時30分に)動作しているかを確認します。loggerでシスログ(/var/log/messages)に出力されているかを確認します。
問題がないようでしたら、次はわざとnagiosのサービスをダウンさせて、30分にサービスが起動しているかを確認します。またメールが届いていることも確認します。
ここまで確認ができましたら、動作としましては問題ないと思います。
今回はここまでです。最後までお読みいただきありがとうございました。