1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

定期的に生成されるファイルがきちんと生成されているかをチェックして、生成されていない場合はメールを送信するという仕組みを作ってみる

Last updated at Posted at 2021-08-09

はじめに

最近、小さなサービスを作りすぎていて、気が付いていたら停止しているなんてことが時々あり、中には数時間、数日放置してしまったとかいうことがあって、少し困っている。

ということで、これらのファイルの更新日をチェックして、1時間以上ファイルが更新されていなかったら通知する仕組みを作ってみる。

条件

  • 通知のメールはGMailを使用
  • 生成されるファイルは[年月日].[拡張子]という形式
  • スクリプトはホームディレクトリ直下に作成

スクリプト作成

以下の通り作成。
GMailのアカウントとパスワード、メール送信先は各自のものを使用。

check.py
#!/usr/bin/env python3

import requests, os, smtplib, ssl
from glob import glob
from datetime import datetime, timedelta
from email.mime.text import MIMEText

# メール送信関数
def send_info(name, subject, body):

    gmail_account = "*****@gmail.com"
    gmail_password = "*****"
    mail_to = "*****@*****.com"

    msg = MIMEText(body, "html")
    msg["Subject"] = "[{}] {}".format(name, subject)
    msg["To"] = mail_to
    msg["From"] = gmail_account

    server = smtplib.SMTP_SSL("smtp.gmail.com", 465,
        context=ssl.create_default_context())
    server.login(gmail_account, gmail_password)
    server.send_message(msg)
    
# 更新日取得関数
def get_ctime(f):

    t = os.stat(f).st_ctime
    return datetime.fromtimestamp(t)

# ファイル更新確認関数
def isFileUpdated(f, hour):
    
    t = get_ctime(f)
    flg = True
    
    if datetime.now() - t > timedelta(hours=hour):
        flg = False
        
    return flg
    
# 時間間隔
hour = 1

# データ保存先
dir = "/var/www/html/[myservice]/data/"

# 確認対象のファイル
types = [
    "*.csv",
    "*.jpg",
    "*.txt"
]

for tp in types:

    print(tp)

    files = glob(dir + tp)
    files.sort()
    
    f = files[-1]

    rs = isFileUpdated(f, hour)
    
    if rs == False:
        send_info(
            "myservice", 
            "file is not updeted",
            "Check a script."
        )
        print("mail send.")

実行

スクリプトに実行権限を付与。

chmod a+x check.py

試しに実行。

./check.py

GMailが送信できない場合の対処

GMailが送信できない場合は以下のURLをご参照下さい。

自動実行

cronに登録し、営業時間中(8時〜19時)に1時間ごとに確認して更新されていない場合にメールを送信する。

10 8-19 * * * /home/[ユーザー名]/check.py

できた!

1
2
0

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
1
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?