LoginSignup
25

More than 5 years have passed since last update.

サーバーのサービスを自動的にチェックするスクリプト

Posted at

ホスチングサーバーほとんどは99.9%のサーバーアップタイムを保証してますが、0.1%のダウンを避けるため、あるいはサーバー混乱でapacheやmysqlが落ちるのを防止するため、このスクリプトが役に立ちます。

Shellscriptでサービス状況を確認

servicecheck.sh
#!/bin/bash

#確認したいサービス
services=( "httpd" "mysqld" )

for service in "${services[@]}"
do
if (( $(ps -ef | grep -v grep | grep $service | wc -l) == 0 ))
then
    /etc/init.d/$service restart
fi
done

確認したいサービスhttpdmysqldをループしてサービスの状態を確認します。0は動いてない状態ですから再起動しておきます。

再起動した際システム担当にメール送信(任意)

servicecheck.sh
#現在の時間
now=$(date +"%F %H:%M:%S")
#システム担当のメールアドレス
email="system@admin.com"

if [ $restartflg -gt 0 ]
then
    printf "services are downed and automatically restarted on $now" | 
    mail -s "System Message: service restarted" $email
fi

if行の$restartflgは再起動したかどうかを判断するフラッグです。先の再起動するifの中にrestartflg=1forの前にrestartflg=0を書きます。つまりこうなります。

servicecheck-ver2.sh
#!/bin/bash

#確認したいサービス
services=( "httpd" "mysqld" )

restartflg=0
for service in "${services[@]}"
do
if (( $(ps -ef | grep -v grep | grep $service | wc -l) == 0 ))
then
    /etc/init.d/$service restart
    restartflg=1
fi
done

#現在の時間
now=$(date +"%F %H:%M:%S")
#システム担当のメールアドレス
email="system@admin.com"

if [ $restartflg -gt 0 ]
then
    printf "services are downed and automatically restarted on $now" | 
    mail -s "System Message: service restarted" $email
fi

メモリスペースの確認(任意)

servicecheck.sh
if (( $(free -m | grep -i "mem" | awk '{print $4}') < 100 ))
then
    eval $(echo 3 > /proc/sys/vm/drop_caches)
fi

メモリ・キャッシュ削除する コマンドです。1行目はフリーメモリが100mbより少ない場合を確認し、真だったら一旦クリアします。

最後はCronに追加で自動化(必須)

crontab -eでcronを好みのテキストエディタで編集します。

crontab
MAILTO=""
* * * * * bash /スクリプトの場所/servicecheck.sh

sudo service crond restartでcronを再起動します。

これでスクリプトを毎分実行するようにしました。ちなみに、cronが実行する時システムメールがデフォルトでログされます。毎分実行するので1日1440回メールが送られます。/var/mail/ユーザー名に書き込んちゃいますので大したことがないですが、必要ないなら1行目のMAILTO=""で解決できます。
メモリ・キャッシュ削除するコマンドはroot権限が必要になりますので、cronをrootから設定しないとできないみたい。

スクリプトをGistからもダウンロードできますよ。

じゃねー

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
25