ホスチングサーバーほとんどは99.9%のサーバーアップタイムを保証してますが、0.1%のダウンを避けるため、あるいはサーバー混乱でapacheやmysqlが落ちるのを防止するため、このスクリプトが役に立ちます。
Shellscriptでサービス状況を確認
# !/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
確認したいサービスhttpd
とmysqld
をループしてサービスの状態を確認します。0
は動いてない状態ですから再起動しておきます。
再起動した際システム担当にメール送信(任意)
# 現在の時間
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=1
、for
の前にrestartflg=0
を書きます。つまりこうなります。
# !/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
メモリスペースの確認(任意)
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を好みのテキストエディタで編集します。
MAILTO=""
* * * * * bash /スクリプトの場所/servicecheck.sh
sudo service crond restart
でcronを再起動します。
これでスクリプトを毎分実行するようにしました。ちなみに、cronが実行する時システムメールがデフォルトでログされます。毎分実行するので1日1440回メールが送られます。/var/mail/ユーザー名
に書き込んちゃいますので大したことがないですが、必要ないなら1行目のMAILTO=""
で解決できます。
メモリ・キャッシュ削除するコマンドはroot権限が必要になりますので、cronをrootから設定しないとできないみたい。
スクリプトをGistからもダウンロードできますよ。
じゃねー