Skip to content

LINEとPythonでWebサイトが正常に動いているか定期的に通知しよう[死活監視]

こんにちは。

このブログは不安定で定期的にエラーが発生することはこれまでの記事で何度か述べており、過去にBitnami+WordPressの環境でエラーをメールで通知するプラグインを紹介しました。

しかしながら、くいまるblogではnginxのエラーが多いため、そもそもプラグインが動作していないことがありました。

そこで、pingコマンドを定期的に送信して、コマンドが返ってくるかをLINEで通知するシステムを作成しました。

具体的には、Pythonとcron、LINE Notifyを使ってWebサイトが正常に動いているかを定期的に通知します。

813724e9 202311071947

こんな感じで教えてくれます。

環境

  • Python 3.9.2
  • WordPress with NGINX and SSL packaged by Bitnami 6.2.2-36

LINE Notifyからトークンを発行する

まずは、下記サイトのLINE Notifyにアクセスしてトークンを発行します。

アカウントを新規作成して、画面右上からマイページに進みます。

49eb8896 202311071944

画面下にあるアクセストークンの発行からトークンを発行する をクリックします。

bdb329d2 202311071945

次に、トークン名をSendPing などの名前に設定し、通知を送信するトークルームを選択します。1:1でLINE Notifyから通知を受け取る がおすすめです。

726cc5df 202311071946

発行ボタンを押すと、トークンが発行されます。プログラムで用いるのでメモしておいてください。

Pythonプログラムを作成する

以下のコマンドでは、ホームディレクトリ配下にcheckwebsite.py という名前のPythonプログラムをvimで作成しています。

cd ~
vim checkwebsite.py

i キーで入力モードに入り、以下のプログラムをコピーします。

import subprocess
import requests

def send_line_message(message):
    token = '[LINEトークン]'
    url = "https://notify-api.line.me/api/notify"
    headers = {"Authorization" : "Bearer "+ token}
    payload = {"message" :  message}
    r = requests.post(url, headers = headers, params=payload)

def check_website():
    url = "https://kuimal.com"
    
    try:
        response = requests.get(url)
        response.raise_for_status()
        
        soup = BeautifulSoup(response.content, 'html.parser')
    send_line_message(url + " は正常です")
    
    except requests.exceptions.RequestException as e:
        send_line_message("接続エラー:" + str(e))

if __name__ == "__main__":
    check_website()
  • {LINEトークン} はトークンに置き換えます。
  • url = "https://kuimal.com" の部分は監視したいアドレスもしくはIPアドレスにします。カンマ区切りで複数入力できます。
  • リクエストが送信できなかった場合(例外処理)のときは、接続エラーをLINEに送信します。

作成したらwq! で保存して終了します。

試しにプログラムを実行してみましょう。以下のコマンドを実行します。

python3 checkwebsite.py
813724e9 202311071947

LINE Notifyからメッセージを受信できていれば成功です。

また、アクセスできなかった場合のみ通知したい場合はsend_line_message(url + " は正常です") の部分を削除します。

cronで定期実行する

次に作成したPythonスクリプトを定期実行します。

cronがスクリプトを実行できるようにユーザーが実行する権限を付与します。

sudo chmod 700 checkwebsite.py

続いてcronを編集します。

crontab -e

cronの編集画面が開いたら、以下の文を入力します。pythonがインストールされているディレクトリを指定します。

0 0 * * * /usr/bin/python3 /home/hoge/checkwebsite.py

上記の例では毎日0時0分にcheckwebsite.pyを実行します。

毎分実行するには0 0 * * * の部分を*/1 * * * * というように変更します。

おわりに

このブログはGCEのBitnamiで動作しています。月1くらいでサーバーが落ちることがありますが、nginxを以下のコマンドで再起動するとしれっと直ることが多いです。例外処理のときに、以下のコマンドを実行することで対策しています。

sudo /opt/bitnami/ctlscript.sh restart nginx

カテゴリプログラミングUbuntuWordPress

Be First to Comment

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

コメントは日本語で入力してください。(スパム対策)

CAPTCHA