Linux之crontab命令
以下僅為本人工作、學習過程中所接觸到的內容,不足之處請多包涵。
簡介
crontab是用來定期執行程序的命令。crontab命令是cron table的簡寫,是cron的配置文件,也可以叫它作業列表。crontab 指令所設定的工作將會循環的一直執行下去,可循環的時間為分鍾、小時、每周、每月或每年等。crontab 除了可以使用指令執行外,亦可編輯 /etc/crontab 來支持。讓 crontab 可以生效的服務是 crond 服務。
我們可以在以下文件夾內找到相關配置文件。
- /var/spool/cron/ 目錄下存放的是每個用戶包括root的crontab任務,每個任務以創建者的名字命名
- /etc/crontab 這個文件負責調度各種管理和維護任務。
- /etc/cron.d/ 這個目錄用來存放任何要執行的crontab文件或腳本。
- 我們還可以把腳本放在/etc/cron.hourly、/etc/cron.daily、/etc/cron.weekly、/etc/cron.monthly目錄中,讓它每小時/天/星期、月執行一次。
Linux任務調度的工作主要分為以下兩類:
1、系統執行的工作:系統周期性所要執行的工作,如備份系統數據、清理緩存
2、個人執行的工作:某個用戶定期要做的工作,例如每隔10分鍾檢查郵件服務器是否有新信,這些工作可由每個用戶自行設置
語法
crontab [-u username] [ -l | -e | -r ]
參數
-u 只有 root 才能進行這個任務,幫其他使用者建立/移除 crontab 工作排程
-e 編輯 crontab 的工作內容
-l 查閱 crontab 的工作內容
-r 移除所有的 crontab 工作內容,若僅要移除一項,用 -e 編輯
-i 在刪除用戶的crontab文件時給出確認提示
定時任務的編寫
使用crontab -e
編輯定時任務,每項定時任務占據一行,每行的格式為:
f1 f2 f3 f4 f5 program
其中 f1 是表示分鍾,f2 表示小時,f3 表示一個月份中的第幾日,f4 表示月份,f5 表示一個星期中的第幾天。program 表示要執行的程序。
當 f1 為 * 時表示每分鍾都要執行 program,f2 為 * 時表示每小時都要執行程序,其餘類推
當 f1 為 a-b 時表示從第 a 分鍾到第 b 分鍾這段時間內要執行,f2 為 a-b 時表示從第 a 到第 b 小時都要執行,其餘類推
當 f1 為 */n 時表示每 n 分鍾個時間間隔執行一次,f2 為 */n 表示每 n 小時個時間間隔執行一次,其餘類推
當 f1 為 a, b, c,... 時表示第 a, b, c,... 分鍾要執行,f2 為 a, b, c,... 時表示第 a, b, c...個小時要執行,其餘類推
* * * * *
- - - - -
| | | | |
| | | | +----- 星期中星期幾 (0 - 7) (星期天 為0)
| | | +---------- 月份 (1 - 12)
| | +--------------- 一個月中的第幾天 (1 - 31)
| +-------------------- 小時 (0 - 23)
+------------------------- 分鍾 (0 - 59)
特殊字符 | 意義 |
---|---|
* | 通配符,代表任何時刻都執行 |
,(逗號) | 分隔時段,如果要下達的工作是 3:00 和 6:00 時,就會是: 0 3,6 * * * command |
- | 一段時間范圍內, 如,8 點到 12 點每小時的第 20 分都執行一項工作,命令為 20 8-12 * * * command |
/n | n 代表數字,每隔 n 單位間隔時間,例如每五分鍾執行一次,命令為 /5 * * * * command,/5 等價 0-59/5 |
實例
編輯當前用戶的crontab
crontab -e
或
vi /etc/crontab
查看當前用戶的crontab工作內容
crontab -l
或
cat /etc/crontab
查看指定用戶的crontab工作內容
crontab -l -u user.name
定時任務實例
從任務開始每隔一小時執行一次/root/test.sh
// 錯誤寫法,經測試,每分鍾執行一次
* */1 * * * sh /root/test.sh
// 正確寫法
*/60 * * * * sh /root/test.sh
在 5 月 1 日 23:59 發一封信給指定人,郵件內容已經寫在 /home/test.txt 中
// crontab -e后,編輯如下內容
59 23 1 5 * mail mailbox < /home/test.txt
每5分鍾執行一次/root/test.sh,crontab文件中添加如下一行
*/5 * * * * sh /root/test.sh
// 如果不希望收到執行郵件,可改寫為如下
*/5 * * * * sh /root/test.sh > /dev/null 2>&1
每個星期的星期五16:30執行,crontab文件中添加如下一行
30 16 * * 5 sh /root/test/sh
每月每天每小時的第 0 分鍾執行一次 /bin/ls
0 * * * * /bin/ls
在 12 月內, 每天的早上 6 點到 12 點,每隔 3 個小時 0 分鍾執行一次 /usr/bin/backup
0 6-12/3 * 12 * /usr/bin/backup
周一到周五每天下午 5:00 寄一封信給 alex@domain.name
0 17 * * 1-5 mail -s "hi" alex@domain.name < /tmp/maildata
每月每天的午夜 0 點 20 分, 2 點 20 分, 4 點 20 分....執行 echo "haha"
20 0-23/2 * * * echo "haha"
或
20 */2 * * * echo "haha"
參考
- Linux crontab命令
- Linux crontab命令
- 《鳥哥的Linux私房菜基礎篇-第三版》
- Linux 定時任務
- 《循序漸進Linux(第2版)》