我們來平民化的理解一下什麼是定時任務,Linux定時任務類似於我們平時生活中的鬧鐘,根據我們設定好的時間,定點去執行某件事情。Linux定時任務命令是 crontab
,該命令需要 crond
服務支援。在安裝完作業系統後,系統預設會安裝 crond 服務,並且該服務預設是自啟動狀態。
為什麼要用到定時任務
計劃任務主要是做一些定期週期性的任務,比如每天凌晨1點定時備份重要的資料、每天凌晨2點清理一些垃圾檔案等。
計劃任務主要分為以下兩種使用情況:
- 系統級別的定時任務
臨時檔案清理、系統資訊採集、日誌檔案切割
- 使用者級別的定時任務
定時備份系統配置檔案、定時備份資料庫的資料
crond
常用命令
- 檢視 crond 服務的執行狀態
$ service crond status
我們看到crond服務狀態是active running
執行中。
service crond start //啟動服務
service crond stop //關閉服務
service crond restart //重啟服務
service crond reload //重新載入配置
配置定時任務
cron有兩個配置檔案,一個是一個全域性配置檔案(/etc/crontab),是針對系統任務的;一組是crontab命令生成的配置檔案(/var/spool/cron下的檔案),是針對某個使用者的。
我們先來看看/etc/crontab
檔案:
$vi /etc/crontab
1、任務執行時間格式講解
來看看上面的截圖例子,有5個*
符號,他們分別代表的意思如下表:
專案 | 含義 | 範圍 |
---|---|---|
第一個”*” | 一小時當中的第幾分鐘(minute) | 0~59 |
第二個”*” | 一天當中的第幾小時(hour) | 0~23 |
第三個”*” | 一個月當中的第幾天(day) | 1~31 |
第四個”*” | 一年當中的第幾個月(month) | 1~12 |
第五個”*” | 一週當中的星期幾(week) | 0~7(0和7都代表星期日) |
以上表格中的時間表示,都是標準的形式,在我們實際的使用過程中,可能對於時間的要求更加複雜,比如想在每天的凌晨1點至3點,6點至10點執行任務等這種比較複雜的情況,我們該如何設定時間呢?我們先來看下時間表達的一些特殊符號:
特殊符號 | 含義 |
---|---|
*(星號) | 代表任何時間。比如第一個”*”就代表一小時種每分鐘都執行一次的意思。 |
,(逗號) | 代表不連續的時間。比如” 0 8,12,16 * * *命令”就代表在每天的 8 點、12 點、16 點執行一次 |
-(中槓) | 代表連續的時間範圍。比如”0 5 * * 1-6命令”,代表在週一到週六的凌晨 5 點 0 分執行 |
/(正斜線) | 代表每隔多久執行一次。比如”*/10 * * * *命令”,代表每隔 10 分鐘就執行一次 |
2、任務執行時間舉例
30 20 * * *
在 20 點 30 分執行命令0 14 * * 1
在每週一的 14 點 0 分執行命令0 2 1,15 * *
在每月 1 號和 15號的凌晨 2 點 0 分執行命令30 3 * * 1-5
在每週一到週五的凌晨 3 點 30 分執行命令*/10 3 * * *
在每天的凌晨 3 點,每隔 10 分鐘執行一次命令0 0 1,15 * 1
在每月 1 號和 15號,每週一會執行命令
3、使用舉例
- 讓系統每隔 5 分鐘就向
/tmp/test
檔案中寫入一行“test crontab”,我們來驗證一下系統定時任務是否會正常執行:
$crontab -e
進入編輯介面之後,輸入:
*/5 * * * * /bin/echo "test crontab" >> /tmp/test
然後按一下Esc
,輸入:wq!
儲存,儲存之後,會在/var/spool/cron
目錄生成一個root
檔案,因為我是用root賬戶建立的。
5分鐘後,我們去看看/tmp
目錄已經生成了test
檔案,並且檔案中已經寫入了一條test crontab
。
- 讓系統在每週一的凌晨1 點 10 分重啟一次
5 5 * * 1 /sbin/shutdown -r now
注意事項
- 時間+需要執行的任務選項都不能為空,必須填寫
- crontab 定時任務的最小有效時間是分鐘,最大有效時間是月。
- 在定時任務中,不管是直接寫命令,還是在指令碼中寫命令,最好都使用絕對路徑。有時使用相對路徑的命令會報錯
- 在定義時間時,日期和星期最好不要在一條定時任務中出現,因為它們都以天為單位,非常容易混淆,不便於管理
本作品採用《CC 協議》,轉載必須註明作者和本文連結