自動化無しに生活無し

WEBとかAIとかLinux関係をひたすら書く備忘録系ブログ

シェルスクリプトでウェブサーバーの応答不能・ステータスコードをチェックして記録・通知する【pingとcurl、即メール送信にも有効】

thumbnail

サーバーが応答不能になった時、すぐに対処できるよう、通知機能が欲しい。そういうときのシェルスクリプト。

pingで応答不能をチェックする

#! /bin/bash

while true ; do
    ping -c 1 192.168.11.99
    rc=$?
    if [[ $rc -eq 0 ]] ; then
        echo "正常です"
    else
        echo "失敗しました"
    fi  
    sleep 1
done

後は『正常です』『失敗しました』のいずれかに任意の処理を書き込む。

curlで応答不能をチェックする

curlはHTTPのステータスコードも手に入るので、それも考慮しつつ分岐させる。

#! /bin/bash

while true ; do
    code=`curl -LI 192.168.11.1 -o /dev/null -w '%{http_code}\n' -s`
    echo "ステータスコードは" $code

    if [[ $code -eq 200 ]] ; then
        echo "200の処理"
    elif [[ $code -eq 503 ]] ; then
        echo "サーバーダウン"
    fi  

    sleep 1
done

if文を追加すれば、サーバーダウンの他に、502のゲートウェイエラー、504のゲートウェイタイムアウト等の判定もできる。サーバー側のエラーステータスコードは500系なので必要な分だけ設定しておく。

400系はクライアントエラーなので、チェックする端末がネットワークから切り離されたときなどに対応できる。

結論

後はこのシェルスクリプトをサーバーとは違う、別端末のcrontabなどにブートしたら実行させる。

PythonやRubyなどの言語でも良いが、どんなLinuxサーバーでも動作する上に負担の少ないシェルスクリプトを選んだ。

  • 参照元1:https://stackoverflow.com/questions/6118948/bash-loop-ping-successful
  • 参照元2:https://superuser.com/questions/272265/getting-curl-to-output-http-status-code
スポンサーリンク

シェアボタン

Twitter LINEで送る Facebook はてなブログ