こんにちは。
このブログは不安定で定期的にエラーが発生することはこれまでの記事で何度か述べており、過去にBitnami+WordPressの環境でエラーをメールで通知するプラグインを紹介しました。
しかしながら、くいまるblogではnginxのエラーが多いため、そもそもプラグインが動作していないことがありました。
そこで、pingコマンドを定期的に送信して、コマンドが返ってくるかをLINEで通知するシステムを作成しました。
具体的には、Pythonとcron、LINE Notifyを使ってWebサイトが正常に動いているかを定期的に通知します。
こんな感じで教えてくれます。
環境
- Python 3.9.2
- WordPress with NGINX and SSL packaged by Bitnami 6.2.2-36
LINE Notifyからトークンを発行する
まずは、下記サイトのLINE Notifyにアクセスしてトークンを発行します。
アカウントを新規作成して、画面右上からマイページに進みます。
画面下にあるアクセストークンの発行からトークンを発行する
をクリックします。
次に、トークン名をSendPing
などの名前に設定し、通知を送信するトークルームを選択します。1:1でLINE Notifyから通知を受け取る
がおすすめです。
発行ボタンを押すと、トークンが発行されます。プログラムで用いるのでメモしておいてください。
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
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
Be First to Comment