以前、pythonでプロセスを監視しておき、いなくなったらgmail使ってメール送信をやりました。
もはやpython 2はオワコンですので、python 3に対応したコードを記載します。
あわせて読みたい:
また、前はwhile文での実行でしたがプロセスを常に起動しておくのはいただけないのでcronでの実行を想定したものに変更しました。
まず実行するスクリプト(check_process_to_gmail.py)です。”keyword”を、プロセス名に含まれているべき文字に変更してください。
# coding: utf-8
import subprocess
import sendGmail
keyword = "hogehoge"
cmd = "ps ax | grep " + keyword + " | grep -v grep | wc -l"
from_addr = "FROM_ADDR@gmail.com"
passwd = "FROM_PASS"
to_addr = "TO_ADDR@gmail.com"
title = arg + " end."
body = ""
try:
# result should be proess count string
result = subprocess.check_output(cmd, shell=True).decode("utf-8").strip()
if result != "2":
body = keyword + " process count was " + result + "!!!!"
except Exception as e:
body = str(e.args)
if body != "":
msg = sendGmail.create_message(from_addr, to_addr, title, body)
sendGmail.send_via_gmail(from_addr, to_addr, passwd, msg)
sendGmail.pyは以下のようになります:
# coding: utf-8
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from email.utils import formatdate
def create_message(from_addr, to_addr, subject, body):
msg = MIMEText(body)
msg["Subject"] = subject
msg["From"] = from_addr
msg["To"] = to_addr
msg["Date"] = formatdate()
return msg
def send_via_gmail(from_addr, to_addr, passwd, msg):
s = smtplib.SMTP("smtp.gmail.com", 587)
s.ehlo()
s.starttls()
s.ehlo()
s.login(from_addr, passwd)
s.sendmail(from_addr, [to_addr], msg.as_string())
s.close()
そしたら、1分毎にチェックしたい場合はcrontabで例えば以下のように設定します:
*/1 * * * * python3 /path/to/check_process_to_gmail.py
以上です。
前よりはきれいなコードになってるかなー
コメント