cron(crontab) – Linux常用指令#01
想要讓Linux定期幫你自動執行處理例行公事?那就必須要學如何使用cron(crontab)系統排程!
本文將詳細介紹crontab指令、cron設定檔、cron執行頻率、額外記錄log。
指令說明
編輯cron設定檔
系統會用vim進入編輯cron設定檔的模式!
用設定檔語法修改完成,就像vim一樣『wq』存檔離開、並且重啟crond即可生效!
1 |
[andy@www ~]$ crontab -e |
列出cron設定
1 2 |
[andy@www ~]$ crontab -l 30 16 * * * /usr/local/bin/python3.6 /home/andy/spider.py >> /home/andy/Pythons/logs/spider.log 2>&1 |
移除所有排程
1 |
[andy@www ~]$ crontab -r |
新增或移除可使用crontab使用者的指令
1 |
[andy@www ~]$ sudo crontab -u username |
設定檔語法
設定完畢後,記得要重啟crond服務喔!
執行頻率 | 欲執行的指令 | |
5 17 * * * | /usr/local/bin/python3.6 /home/andy/spider.py | |
0 4 1 * * | /sbin/reboot | |
* * * * * | /usr/local/bin/xxxx |
執行頻率
時間單位說明
* | * | * | * | * | 用途說明 |
┃ | ┃ | ┃ | ┃ | ┗→ | 星期(數值範圍:0~7),系統時間為0或7代表星期日、1為星期一,依序到6為星期六 |
┃ | ┃ | ┃ | ┗ | ━→ | 月份(數值範圍:1~12),系統時間為第n月,就執行指令 |
┃ | ┃ | ┗ | ━ | ━→ | 日期(數值範圍:1~31),系統時間為第n號,就執行指令 |
┃ | ┗ | ━ | ━ | ━→ | 小時(數值範圍:0~23),系統時間為n點,就執行指令 |
┗ | ━ | ━ | ━ | ━→ | 分鐘(數值範圍:0~59),系統時間為n分,就執行指令 |
符號使用方式
符號 | 功能說明 |
* | 代表任何數值,換句話說,我不在乎是幾點幾分幾月的意思 |
*/x | 代表每間隔x單位(時, 分, 日, 月…)的時間執行一次 |
a,b | 以『,』分隔,列舉想執行的時刻,中間不能加空白 |
a–b | 代表a到b的時間區間內,都會執行指定的指令 |
十一種常用設定
(此處以『使用情境』做為主題,所以表格與前文的相反)
使用情境 | 分 | 時 | 日 | 月 | 星期 | |
每小時的35分執行 | 35 | * | * | * | * | |
每20分鐘執行一次 | */20 | * | * | * | * | |
每天早上4點整執行 | 0 | 4 | * | * | * | |
每8小時執行一次 | * | */8 | * | * | * | |
每天3~6點整執行 | 0 | 3-6 | * | * | * | |
每個月5號執行 | 0 | 0 | 5 | * | * | |
每一季初執行 | 0 | 0 | 1 | 3,6,9,12 | * | |
每年底時執行 | 59 | 23 | 31 | 12 | * | |
每星期日執行 | 0 | 0 | * | * | 7 | |
每個工作日執行 | 0 | 0 | * | * | 1-5 | |
每個月的第一個星期六執行 | 0 | 0 | * | */1 | 6 |
欲執行的指令
欲執行的指令,最好輸入完整路徑,這樣才能完全避免系統變數(PATH)的問題!
可以利用『which』來查詢Linux指令對應到的完整路徑!
1 2 3 4 5 6 |
[andy@www ~]$ which python3.6 /usr/local/bin/python3.6 [andy@www ~]$ which reboot /sbin/reboot [andy@www ~]$ which mysqld /usr/sbin/mysqld |
套用新設定
重新載入crond設定檔
1 |
[andy@www ~]$ sudo service crond reload |
進階設定
用root執行cron
贊助廣告
其實直接用sudo編輯cron設定檔就好了!
1 |
[andy@www ~]$ sudo crontab -e |
查看cron執行記錄
1 |
[andy@www ~]$ sudo tail /var/log/cron |
額外記錄執行Log
以Python為例,執行Python程式的過程中,我們可能會讓Python顯示『print()』特定訊息在螢幕上,而這些訊息可以透過下列設定方式存起來!
修改設定檔
1 |
[andy@www ~]$ crontab -e |
1 |
* */4 * * * /usr/local/bin/python3.6 /home/andy/spider.py >> /home/andy/Pythons/logs/spider.log 2>&1 |
『a >> b』:將執行指令a時,輸出在螢幕上的資訊導出至b檔案之中!
- a:執行python script的指令『/usr/local/bin/python3.6 /home/andy/spider.py』
- b:將執行結果導出至指定的log檔之中『/home/andy/Pythons/logs/spider.log 2>&1』
Pingback:如何使用certbot自動更新SSL憑證 (CentOS 6,7,8, Ubuntu) - BrilliantCode.net