1. 程式人生 > >利用python制作在Linux服務器後臺定時運行的任務-郵件提醒

利用python制作在Linux服務器後臺定時運行的任務-郵件提醒

後臺進程 user rep 重復 什麽 pri nlog .exe 服務器

1. 自動任務的功能為:

定時掃描數據庫中的記錄,然後發郵件

代碼如下

scheduleMail.py

import pymysql
import smtplib  
from email.mime.text import MIMEText  
from email.header import Header 
import time

def sendMail(body):
    sender = [email protected]  
    receiver = [[email protected], [email protected]
, [email protected]] subject = 郵件主題 smtpserver = smtp.163.com username = your username password = your password msg = MIMEText(body,plain,utf-8) #中文需參數‘utf-8‘,單字節字符不需要 msg[Subject] = Header(subject, utf-8) msg[From] =
xxx<[email protected]> msg[To] = "[email protected]‘, ‘[email protected]‘, ‘[email protected]" smtp = smtplib.SMTP() smtp.connect(smtp.163.com) smtp.login(username, password) smtp.sendmail(sender, receiver, msg.as_string()) smtp.quit()
def scanLogic(): conn = pymysql.connect(host=服務器IP, user=數據庫用戶名, passwd=數據庫密碼, db=數據庫名, port=3306, charset=utf8) cur = conn.cursor() sql = "select * from ..." cur = conn.cursor() cur.execute(sql) alldata = cur.fetchall() mailBody = "" separator = "----------------------------------------------\n" for rec in alldata: field1 = rec[0] field2 = rec[1] line = "field1: %s \t field2: %s \n" % (field1, field2) mailBody = mailBody + line + separator print(郵件正文: %s % mailBody) if (mailBody != ""): sendMail(mailBody) else: print("無可發送郵件") def main(): while (True): time.sleep(1800) scanLogic() main()

2. 把它做成後臺任務的shell腳本如下

scheduleMail.sh

#!/bin/bash
cd /home/yourfolder
python -u scheduleMail.py

3. 如何殺死後臺任務

這裏有個坑,很多網上的博客沒有說,我在這裏提一下,以免大家重復去踩。

殺死該任務,就像殺死傳統Linux進程一樣

ps aux|grep scheduleMail 這裏你會看到進程號,然後使用命令kill -9 scheduleMail就可以殺死該進程 但是,你會發現,進程雖然殺死了,後臺任務仍在運行。 為什麽呢? 你會你只是殺死了shell腳本的後臺進程。 這裏,你需要使用命令ps -e查看所有進程, 發現還有python進程在運行,殺死該python進程就好了 這樣,整個後臺任務就真的被殺死了!

利用python制作在Linux服務器後臺定時運行的任務-郵件提醒