2022年7月2日 星期六

如何設定 Crontab

這幾天終於搞定 Line Notify 的用法, 在將程式部署到樹莓派時順便複習了 Crontab 的用法, 但卻發現以前從未特別針對 Crontab 寫過一篇用法筆記, 而是散見於幾篇樹莓派相關文章中, 所以今晚特別花點時間整理了一下以備日後查考.

在 Linux 環境下編輯 Crontab 的指令如下 :

$ crontab -e   

以樹莓派為例, 它會跳出選單要求選取一個編輯器, 通常選最簡單好用的 nano, 例如 :  

pi@raspberrypi:~ $ crontab -e    
no crontab for pi - using an empty one

Select an editor.  To change later, run 'select-editor'.
  1. /bin/nano        <---- easiest
  2. /usr/bin/vim.tiny
  3. /bin/ed

Choose 1-3 [1]: 1
crontab: installing new crontab

進入 nano 編輯器後即可輸入 Crontab 指令, 每列指令由前面五個以空格隔開的時間欄位以及後面的程式檔路徑與參數等欄位組成, 語法如下圖所示 : 



可見 Crontab 的時間欄位主要是使用下列四個符號來設定 :
  1. * (任何值)
  2. , (列舉)
  3. - (連續區間)
  4. /n (步階, n 為整數)
注意, 其中步階 /n 前面須與 * 搭配使用, 表示每隔多少時間, 例如在分欄位使用 */5 表示每 5 分鐘執行一次, 在時欄位使用 */4 表示每 4 小時執行一次. 

整個 Crontab 可包含多個指令, 各自以不同的時間周期觸發執行不同的指令, 編輯完成後按 Ctrl + O 存檔, 再按 Ctrl + X 跳出 Nano, 這時 Crontab 就生效了, 時間或周期到了就會執行指定之指令. 但要注意, 所執行的指令必須先用 chmod 指令更改為可執行, 例如 : 

sudo chmod +x /home/pi/get_twstock.py

顯示 Crontab 內容之指令如下 :

crontab -l   

以下列出幾個常用的 Crontab 時間欄位設定 : 


 Crontab 時間欄位 說明
 */5 * * * * 每五分鐘執行 (從 0 分開始執行, 0, 5, 10, 15, 20, ...)
 */31 * * * * 每三十一分鐘執行 (從 1 分開始執行, 1, 31, 1, 31, .....)
 * */1 * * * 每一小時執行 (從 0 分開始執行, 00:00, 01:00, 02:00, ....)
 0 * * * * 每個整點 (即 0 分) 執行
 30 8 * * * 每天早上 08:30 執行
 30 8 * * 0 每個星期天早上 08::30 執行 (30 08 * * Sun 亦可)
 30 8 1 1 * 每年 1 月 1 日早上 08:30 執行
 30 22 1,15 * * 每個月的 1 日, 15 日的 22:30 執行
 0 9-17 * * * 每天的 9 點至 17 點整點 (即 0 分) 時執行
 0 0 1 * * 每個月的月初 (1 日 0 時 0 分) 執行
 0 0 * * 0 每個周日開始 (0 時 0 分) 執行
 0 0 * * * 每天開始時 (0 時 0 分) 執行
 0 8 * * 6,0 每周六周日 08:00 執行
 0 16,17 * * 1-5 每周一至周五 16:00 與 17:00 執行


沒有留言 :