如何使用排程自動執行程式?

大家費盡千辛萬苦能完成的程式,應該就是希望讓程式自動執行,自動完成我們希望他做的工作吧?如果不會使用排程系統,要設置鬧鐘提醒,時間到時手動執行,這就不是我們想要達到的效果。

排程工作在Mac/LinuxWindows系統不大相同,需要使用不同的工具來管理,所以下面分為兩大部分一一說明。


Mac / Linux – crontab

crontab作為排程管理模組,需透過terminal建立與編輯crontab。

常用基本語法

# 查看crontab列表
crontab -l
# 編輯crontab內容
crontab -e

crontab設定

在terminal中輸入crontab -e後即可開始編輯排程內容,每一個排程內容會有執行的時間與執行程式指令,看起來是相當直覺,就是告訴機器我在哪個時段幫我做哪個指令,雖然說是直覺,但是後續排程作業越來越多,管理上可能將出現問題,會需要額外個工具來輔助我們,這部份我們以後再談。

MIN HOUR DOM MON DOW CMD
欄位說明可設定的值
MIN (minute)分鐘0 ~ 59
HOUR (hour)小時0 ~ 23
DOM (day of month)1 ~ 31
MON (month)月份1 ~ 12
DOW (day of week)星期幾0: Sunday (Sun)
1: Monday (Mon)
2: Tuesday (Tue)
3: Wednesday (Wed)
4: Thursday (Thu)
5: Friday (Fri)
6: Saturday (Sat)
7: Sunday (Sun)
(也可用英文簡稱)
CMD (command)要定期執行的指令Ex. python3 tasks/main.py
特殊字元說明範例
*接受任何時刻
,多個時點3,6,9,12
時點區間8-12
/n每隔n時間單位*/5, 9-13/5

設定每日選股排程

可自行判斷是要美股收盤前或收盤後執行,收盤前執行必須確保資訊源有包含當日最新交易資料,收盤前則可以在當日即進行部位調整,如沒有即時資料源,則只能設定於收盤後執行,待隔日再進行調整部位,這兩個差異可以考量看看需不需要即時。

收盤前排程:亞洲時區04:45(冬令)

45 04 * * 1-5 python3 stock-screener.py

如使用收盤前執行,需額外判斷冬令與夏令時間!

收盤後排程:亞洲時區08:00(冬令)

要確認使用的資料來源什麼時間會更新最新的收盤資料,反正都收盤了再往後調一些會比較保險些。

00 08 * * 1-5 python3 stock-screener.py

Windows

新增排程工作

在搜尋功能中尋找「工作排程器」,並可在右方看見以下畫面

點選建立工作後,即可看到以下畫面。

點選上面頁籤中的「觸發程序」,就可以看到類似選擇時間頻率的選項。

再點選「動作」,再點選「新增」即可給定指令內容,其中有兩個引數,與上部分的crontab邏輯相同。

  • 程式或指令碼:選擇Python執行檔(例如C:\python.exe)
  • 新增引數:輸入欲執行的*.py檔案

基本的設定就告一段落,另有部分細節或額外需求部分就交給大家囉!


排程執行後

排程設定完成後建議大家可以回到原始執行的程式,加上兩個功能—通知與排程紀錄,這樣可以很好的輔助我們再未來知道排程運行的狀況。

通知

可以使用Email通知或Line Notify等功能,並設計是每次執行都通知,或執行失敗才通知。

排程紀錄

  1. 將每次排程執行的內容寫進log,包含執行哪個部分與錯誤內容。
  2. 將排程執行成功與否存進DB,可供後續快速的檢驗,而不會在log海當中翻找。