工作環境:
- RaspBerry Pi 3 Mode B+
- 作業系統:版本代號為 Buster (Version:June 2019 / Release date:2019-06-20 / Kernel version:4.19)
樹莓派排程工作的編輯:
- 如何進入排程工作的編輯?
(要用預設登入帳號pi的身分執行,所以不要sudo)
crontab -e - crontab -e的編輯器預設為nano:
存檔:^O (ctrl-O)
離開:^X (ctrl-X) - 加入一個排程工作
*/5 * * * * python3 /home/pi/Programs/testSchedule.py > /dev/null 2>&1 - 排程時間參數說明:
(第幾分鐘 ) (幾點) (哪一天) (月份) (星期) - 常用排程執行週期格式:
- 每五分鐘執行一次:
*/5 * * * * - 每整點執行一次:
0 * * * * - 每天23:55執行一次:
55 23 * * * - 每月1日00:05執行一次:
5 0 1 * * - 每週一07:00執行一次:
0 7 * * 1 - 每小時的1,10,21,32,43,55
"1,10,21,32,43,55" * * * * - 每月的1-3日06:10個執行一次
10 6 1-3 * * - 排程工作內容編輯後,必須重新啟動排程服務
sudo service cron restart
用於排程的Python Script程式,須注意的事項:
- 用於排程的Python script程式,第一行(shebang line, #! 程式檔名)需指定,這個script要用哪個程式來執行,依照作業環境的不同,區分如下:
- Windows:#! python3
- OS X:#! /usr/bin/env python3
- Linux:#! /usr/bin/python3
- 其他Linux常見的shebang
- #!/bin/sh→使用 sh(Bourne shell) 或其它相容 shell 執行指令碼
- #!/bin/csh→使用 csh(C shell) 執行
- #!/usr/bin/perl -w→使用帶警告的 Perl 執行
- #!/usr/bin/python -O→使用具有程式碼最佳化的 Python 執行
- #!/usr/bin/php→使用 PHP 的命令列直譯器執行
- 確認Python script程式的執行權限:
- 將 .py 程式,放在 預設使用者 pi 的 home folder
- 授予執行權限:chmod +x thePythonScript.py
- python script排程時間指定的範例:
每逢1月2日的03:04am 執行
4 3 2 1 8 /home/pi/schedulePython.py
資料來源: https://books.bod.idv.tw/2019/07/raspberry-pi-cron-crontab.html
本篇介紹如何在 Linux 系統上使用 crontab
工作排程,設定讓系統定時自動執行指定的指令或程式。
Linux 的管理者或使用者如果需要定期執行某些指令或程式,最常見的方式就是使用 cron
來幫忙管理例行性工作排程,只要設定好 crontab
設定檔之後,系統就會自動依照設定的時間,定期執行重複性的工作。
查看與編輯 crontab
在 Linux 系統上,每一位使用者都可以自訂自己的 crontab
排程工作,若要查看自己的 crontab
內容,可以使用 crontab
指令加上 -l
參數:
crontab -l
如果是系統管理者要查詢特定使用者的 crontab
的話,可以使用 -u
參數指定使用者名稱:
sudo crontab -u gtwang -l
若要編輯自己的 crontab
內容,可以加上 -e
參數:
crontab -e
系統管理者若要編輯特定使用者的 crontab 內容,同樣是加上 -u
參數並指定使用者即可:
crontab -u gtwang -e
若要刪除目前所有的 crontab
,可以使用 -r
參數:
crontab -r
個人 crontab
設定
在個人的 crontab
設定中,基本上每一行設定就代表一個要定期執行的程式,其格式如下:
MIN HOUR DOM MON DOW CMD
一行設定包含六個部分,各部分的意義如下:
欄位 | 說明 | 可設定的值 |
---|---|---|
MIN | 分鐘 | 0 到 59 |
HOUR | 小時 | 0 到 23 |
DOM | 日 | 1 到 31 |
MON | 月份 | 1 到 12 ,此欄位亦可用英文簡稱取代,例如一月也可以寫 Jan 。 |
DOW | 星期幾 | 0 (週日)到 6 (週六),7 也代表週日。此欄位亦可用英文簡稱取代,例如週日也可以寫 Sun 。 |
CMD | 要定期執行的指令 | 任何可執行的程式或指令稿(包含參數),例如 /path/to/cmd --your --parameter 。 |
除了一般的數字之外,crontab
亦可使用一些特殊字元,每個特殊字元都有不同的意義與適用情況:
特殊字元 | 代表意義 |
---|---|
星號(* ) | 代表接受任意時刻,例如若在月份那一欄填入星號,則代表任一月份皆可。 |
逗號(, ) | 分隔多個不同時間點。例如若要指定 3:00、6:00 與 9:00 三個時間點執行指令,就可以在第二欄填入 3,6,9 。 |
減號(- ) | 代表一段時間區間,例如若在第二欄填入 8-12 就代表從 8 點到 12 點的意思,也就是等同於 8,9,10,11,12 。 |
斜線加數字(/n ) | n 代表數字,這樣寫的意思就是「每隔 n 的單位」的意思,例如若在第一欄填入 */5 就代表每間隔五分鐘執行一次的意思,也可以寫成 0-59/5 。 |
由於 crontab
設定的欄位有點多,不常用的人通常都記不住,建議在編輯 crontab
時,可以將以下的註解貼在設定檔內,方便參考。
以下是一些最基本的 crontab
設定範例。
30 08 * * * /home/gtwang/script.sh --your --parameter 30 18 * * 0 /home/gtwang/script.sh --your --parameter 30 18 * * Sun /home/gtwang/script.sh --your --parameter 30 08 10 06 * /home/gtwang/script.sh --your --parameter 30 21 1,15,29 * * /home/gtwang/script.sh --your --parameter */10 * * * * /home/gtwang/script.sh --your --parameter 00 09-18 * * * /home/gtwang/script.sh --your --parameter
系統設定檔
除了一般使用者各自的排程工作之外,的還有一類的是屬於系統的排程工作,這類的設定寫在 /etc/crontab
檔案與 /etc/cron.d/
目錄下的各個設定檔中。
系統的 crontab
設定檔內容跟普通使用者的 crontab
類似,不過多了一個使用者名稱的欄位:
MIN HOUR DOM MON DOW USER CMD
例如每小時以 gtwang
帳號權限執行一次,則可以這樣寫:
0 * * * * gtwang /home/gtwang/script.sh --your --parameter
在系統的 crontab
設定檔中,只是多了一個使用者的欄位,其餘的設定方式都跟一般使用者的 crontab
相同。
特殊排程規則
crontab
除了以標準的格式撰寫排程工作之外,他也有提供幾個常用的特殊排程規則,這種特殊排程規則都以 @
開頭,以下是每個特殊排程規則的說明:
排程規則 | 說明 |
---|---|
@reboot | 每次重新開機之後,執行一次。 |
@yearly | 每年執行一次,亦即 0 0 1 1 * 。 |
@annually | 每年執行一次,亦即 0 0 1 1 * 。 |
@monthly | 每月執行一次,亦即 0 0 1 * * 。 |
@weekly | 每週執行一次,亦即 0 0 * * 0 。 |
@daily | 每天執行一次,亦即 0 0 * * * 。 |
@hourly | 每小時執行一次,亦即 0 * * * * 。 |
例如每天執行一次,就可以這樣寫:
@daily /home/gtwang/script.sh --your --parameter
Email 通知設定
crontab
預設會將執行程式的輸出以 Email 送給執行的使用者,若要更改收件者,可以使用 MAILTO
變數指定:
MAILTO=gtwang 30 08 * * * /home/gtwang/script.sh --your --parameter
如果不想讓 crontab
寄送任何 Email 出來,可將 MAILTO
設定為空字串:
MAILTO="" 30 08 * * * /home/gtwang/script.sh --your --parameter
執行 Shell
若要更改執行工作的 Shell 環境,可以使用 SHELL
來指定要使用的 Shell:
SHELL=/bin/sh 30 08 * * * /home/gtwang/script.sh --your --parameter
限制使用者使用 crontab
由於系統安全性的考量,我們可能會希望限制只有特定的使用者可以使用 crontab
,這時候就可以透過系統的 /etc/cron.allow
或 /etc/cron.deny
兩個檔案來設定。
/etc/cron.allow
- 如果這個檔案存在,則只有被列在這裡的帳號可以使用
crontab
,其餘帳號皆禁止使用,也就是白名單。 /etc/cron.deny
- 如果這個檔案存在,則被列在這裡的使用者都禁止使用
crontab
,也就是黑名單。
/etc/cron.allow
與 /etc/cron.deny
設定檔在列出帳號時,語法都相同,每一行寫一個帳號名稱。
如果 /etc/cron.allow
與 /etc/cron.deny
兩個設定檔都不存在,則就只有系統管理者 root
能夠使用 crontab
。
資料來源: https://blog.gtwang.org/linux/linux-crontab-cron-job-tutorial-and-examples/
沒有留言:
張貼留言