大家費盡千辛萬苦能完成的程式,應該就是希望讓程式自動執行,自動完成我們希望他做的工作吧?如果不會使用排程系統,要設置鬧鐘提醒,時間到時手動執行,這就不是我們想要達到的效果。
排程工作在Mac/Linux
與Windows
系統不大相同,需要使用不同的工具來管理,所以下面分為兩大部分一一說明。
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等功能,並設計是每次執行都通知,或執行失敗才通知。
排程紀錄
- 將每次排程執行的內容寫進log,包含執行哪個部分與錯誤內容。
- 將排程執行成功與否存進DB,可供後續快速的檢驗,而不會在log海當中翻找。