Ubuntu設置定時任務使用python模塊發送郵件

Ubuntu16.04環境。。。
定時任務,顧名思義,固定時間進行的任務。在Ubuntu中,可以使用crontab來設置定時任務。

crontab -l # 查看當前定時任務列表
crontab -e # 編輯定時任務
crontab -r # 清空定時任務。

先來一個簡單的, 每隔一分鐘將當前時間追加到一個文件中。
注意權限問題,當用戶並非root用戶時。只有在用戶自己目錄下創建文件之類不需要提升權限。 就是 sudo …
用戶目錄
創建定時任務。初次輸入此命令會讓你選擇編輯方式,自己看着選就好。如果不滿意輸入命令可以更換 select-editor

crontab -e

會啓動一個文件,我們將定時任務在文件中編輯進去就好,由於是一個簡單的定時任務,也就不需要創建shell腳本了。。。

*/1 * * * *  date >> /home/frng/tmp/mydate

每隔一分鐘將當前時間追加到 /home/frng/tmp/mydate文件中。
前五個佔位符分別代表

  • 每小時的多少分鐘
  • 每天的多少小時
  • 每個月的多少天
  • 每年的多少月
  • 每週的第幾天

*/n 表示 每隔n段時間
, 表示不連續的幾個時間
- 表示連續的時間


* 1,3 * * * 表示每天的1 點3點執行, 也就是 1, 3
* 1-3 * * * 表示每天1-3點執行,也就是 1, 2, 3
*/10 2 * * * 表示每天兩點時每隔10分鐘執行一次

創建完成保存後可以 crontab -l查看當前任務。
然後找到保存時間信息的文件,查看,可以發現每隔一分鐘就會向其中追加一段信息
時間信息

定時任務,就是這樣。而所謂使用python發送郵件就是定期執行一個.py腳本。這個腳本可以發送郵件。可以每天向自己發送一個笑話之類。。如果有網絡服務器一直運行的話。
獲取笑話的爬蟲文件。可以通過get_content()方法得到一個笑話。笑話網址,如有侵權博客立刪。
http://xiaohua.zol.com.cn/new/

import requests
from bs4 import BeautifulSoup


baseurl = 'http://xiaohua.zol.com.cn'


# 詳情頁解析
def parse_detail(url):
    resp = requests.get(url)
    soup = BeautifulSoup(resp.text, features='lxml')
    content = soup.find_all('div', attrs={"class": "article-text"})[0].text.strip()
    return content


# 從主頁獲取詳情頁鏈接 mainurl = 'http://xiaohua.zol.com.cn/new/'
def get_detail_urls():
    mainurl = 'http://xiaohua.zol.com.cn/new/'
    resp = requests.get(url=mainurl)
    soup = BeautifulSoup(resp.text, features="lxml")
    aTagList = soup.find_all(name='a',text='查看全文»')[1:3]    # 只查看第二第三個
    return [baseurl+aTag.get("href") for aTag in aTagList]


def get_content():
    msg_html = ''
    urlList = get_detail_urls()
    for url in urlList:
        content = parse_detail(url)
        msg_html += content
    return msg_html


if __name__ == '__main__':
    # parse_detail('http://xiaohua.zol.com.cn/detail60/59427.html')
    # get_detail_urls()
    msg_content = get_content()
    print(msg_content)

郵件發送的py文件

import os
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

from requetsAndBs4 import get_content


mailHost = 'smtp.163.com'
mailPort = 994

user = '[email protected]'
password = os.environ.get("mail163pass")

def send_mail():
    receiver = ['*****@qq.com', '*****@qq.com']	# 收件人郵箱列表
    smtp = smtplib.SMTP_SSL(mailHost, mailPort)
    smtp.login(user=user, password=password)

    msg = MIMEMultipart()

    msg['Subject'] = Header("每日笑話", 'utf-8')
    msg['from'] = user
    msg['to'] = ','.join(receiver)

    content = get_content()
    msg_content = MIMEText(content, 'plain', 'utf-8')
    msg.attach(msg_content)

    smtp.sendmail(user, receiver, msg.as_string())


if __name__ == '__main__':
    send_mail()

將這兩個文件 放在同一目錄下。。。不然郵件發送時找不到requetsAndBs4模塊。
實驗一下不用定時任務是否可以成功發送。調用.py文件 使用
**python 文件名**即可
**注:python的包中一定要安裝有使用到的模塊。比如lxml, bs4等。。。安裝命令pip install … **
執行如果成功 就可以創建定時任務了

/home/frng/.local/virtualenvs/py3.5_spilder/bin/python  /home/frng/PycharmProjects/spiderTest/sendMail.py 

爲什麼我的這麼長呢,因爲使用了虛擬環境,前一個時虛擬環境的python所在的目錄。後一個時發送郵件的.py文件所在的目錄。。。注:最好注意一下權限問題。看當前用戶是否可讀可寫可執行

成功了的話 繼續下一步。這次創建一個shell腳本(並不是)。只是創建了一個.sh文件並沒有使用shell語法。找一個目錄創建sendMail.sh文件最好是當前用戶目錄下。

 vim sendMail.sh

/home/frng/.local/virtualenvs/py3.5_spilder/bin/python /home/frng/PycharmProjects/spiderTest/sendMail.py 這句命令加上去即可。
添加完成查看一下該文件權限ls -l確保當前用戶可以執行。。。
當前用戶可執行
如果不可以的話添加執行權限。。

sudo chmod 777 sendMail.sh

這樣一了百了,爲所有用戶添加了讀寫執行的權限。

最後一步。編輯定時任務 crontab -e在最後加上任務

*/1 * * * * 可執行.sh文件的絕對路徑

表示每個一分鐘執行一次.sh文件 .sh文件可以發送郵件
我的路徑是是

*/1 * * * * /home/frng/mycrontab/sendMail.sh

如果隔了一分鐘收到了郵件 萬事大吉。如果沒收到,檢查檢查吧。最後測試收到郵件後把定時任務改了吧。。。一分鐘一封太恐怖了。。。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章