普及一個工做小技巧,三步實現 Python 自動化

今天的文章源自於工做中的一個小技巧,主要是涉及到平常工做的自動化處理。
python

若是說你天天都須要作一些重複的工做,好比出一份報表、統計一個數據、發一封郵件等等linux

那你徹底能夠把這個任務交給電腦讓它天天自動替你完成,而你只須要從容的打開保溫杯,靜靜地泡一杯枸杞web

今天主要會用到 Linux 下的 cron 這個服務,ok,直接開始數據庫

1. 安裝cron

基本上全部的Linux發行版在默認狀況下都預安裝了cron工具。ubuntu

即便未預裝cron,也很簡單,執行幾條簡單的命令就可手動安裝vim

# 檢查是否已經預裝了cron
service cron status

安裝並啓動服務服務器

安裝:apt-get install cron
啓動/中止/重啓:service cron start/stop/restart
查詢當前任務:crontab -l

2. 安裝檢查

安裝完成後檢查一下是否安裝成功,一樣使用 status命令查看微信

出現以下提示表示安裝成功:dom

另外,在ubuntu下可能會出現這樣的提示:編輯器

這個也表示能夠正常使用

3. cron相關用法

有幾個關於cron的簡單用法能夠了解一下,後面也會經過一個案例詳細介紹如何使用

首先,列出當前用戶計劃的cron做業:

crontab -l

查看其它用戶的cron做業:

crontab –l –u username

移除已經計劃的cron做業:

crontab –r

4. 制定crontab計劃

首先,經過以下命令添加或更新crontab中的任務

第一次進入會要求你選擇編輯器,這個根據本身的習慣選擇。

選擇好以後會進入到這樣的一個界面:

用過vim的同窗應該對這個界面不陌生,相似的操做:按A鍵開始編輯,按ESC輸入wq保存並退出

重點是最下面的一段內容:

m h dom mon dow commmand

這個其實就是crontab調度做業的一個使用介紹,能夠用來設置定時任務。

具體一點的語法是這樣的:

m h dom mon dow command
* * * * * command
- - - - - -
| | | | | |
| | | | | --- 預執行的命令
| | | | ----- 表示星期0~7(其中星期天能夠用0或7表示)
| | | ------- 表示月份1~12
| | --------- 表示日期1~31
| ----------- 表示小時1~23(0表示0點)
------------- 表示分鐘1~59 每分鐘用*或者 */1表示
【左右滑動查看更多】
舉幾個簡單的應用案例:
  • 天天 02:00 執行任務
0 2 * * * command
  • 天天 5:00和17:00執行任務
0 5,17 * * * command
  • 每 10min 執行一次任務
*/10 * * * * command
  • 在特定的某幾個月的週日 17:00 執行任務
0 17 * jan,may,aug sun command

差很少經常使用的就這些,更多的使用案例還能夠參考這個連接:http://linux.51yip.com/search/crontab


上面案例中的command 表示你具體須要執行的任務

例如打印一段話:

echo "Hello xiaoyi" >> /tmp/test.txt 

或者將這段話輸出到txt中:

echo "Hello xiaoyi" >> /tmp/test.txt 

或者是你須要執行一個Python腳本:

python demo.py filepath

後面的filepath表示輸入的參數args,這個可能有的同窗會用到,例以下面的案例中須要輸入文件下載路徑。

5. 定時任務實戰

上面的都搞清楚了,就能夠開始今天的重頭戲了。

首先咱們須要天天從ftp服務器中下載最新的任務數據,將數據下載到本地後經過Python進行數據彙總統計,最後將結果存入數據庫中,若是期間某個環節出現問題則發送告警郵件。

① 編寫Python腳本

首先須要編寫Python腳本完成如下功能:

  • 從數據庫中獲取最新數據日期
  • 從ftp中下載最新數據到本地
  • 對本地最新數據進行彙總統計
  • 統計結果存入數據庫彙總
  • 郵件通知

上面這個流程大體的僞代碼是這樣的:

if __name__ == '__main__':
    """獲取最新數據日期"""
    latest_date = get_max_date()
    # 以最新日期爲名建立文件夾
    download_dir = os.path.join(sys.argv[1], latest_date)
    if not os.path.exists(download_dir):
        os.makedirs(download_dir)
        
    """從ftp中下載最新數據"""
    download_file(latest_date, download_dir)
    """處理最新數據並保存"""
    process_data(latest_date, download_dir)

郵件監控能夠在加一個try catch的異常捕獲,有異常發生的時候則發送郵件

②編寫cron定時任務

打開crontab,編輯以下內容到最後一行,保存並退出

crontab是會自動實時更新任務列表的,若是不放心也能夠經過restart命令重啓cron 服務

定時任務:天天8點零5分和18點零5分執行一次】

這裏有個小建議,全部的路徑都填寫絕對路徑

③ 效果監控

若是Python代碼沒有問題,任務會定時執行。

這裏建議能夠把本身的command單獨在控制檯運行下,沒有問題的時候再寫進到cron任務列表紅。

最終小一的定時任務運行截圖以下:

最下面是ftp文件下載,上面是數據彙總統計

定時任務執行】

說點題外話

若是說你平時的工做有不少重複的任務,像平常指標的採集、取數彙總統計、郵件自動轉發等等

一旦這些工做你能夠經過腳本設置好邏輯,自動化任務也就能夠實現它,最多就須要你天天注意一下郵件,看看有沒有發生錯誤就好了。

本文分享自微信公衆號 - AirPython(AirPython)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。

相關文章
相關標籤/搜索