crontab 用于設定定時任務,通過 cat /etc/crontab 可檢視 crontab 示例: $ cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# | | | | |
# * * * * * user-name command to be executed 根據輸出可知,該指令分三部分, -
* 設定的循環周期 - user-name 指定運作該任務的身份
- 最後一部分是需要運作的腳本路徑或具體的指令
身份 期中以什麼身份運作腳本,可通過 crontab 的 -u 參數指定, $ sudo crontab -u user001 -e 上述指令将以 user001 的身份建立并運作 job。 也可以直接編輯 /etc/crontab 檔案,該檔案中可指定 username: 1 1 * * * user001 user001 /data/home/user001/test.sh job 的管理 -
crontab -e : 編輯或建立 job,配合 -u 可操作指定使用者的 job -
crontab -l : 列出 job,配合 -u 參數可檢視指定使用者的 job -
crontab -r : 删除 job 檔案,慎用,沒有确認過程直接就删了 -
crontab -i : 同 -r ,但删除前會先确認 循環周期 5 個 * 的位置分别代表了不同時間機關,由左至右依次為, - 分,取值範圍 0 ~ 59
- 時,0 ~23
- 天,1 ~ 31
- 月,1 ~ 12,部分實作支援使用名稱 jan,feb,mar,…
- 星期,0 ~ 6,其中星期天為 0,部分實際支援使用名稱,sun, mon, tue…
是以如下格式: 30 5 11 12 * echo "hello"
表示 “12 月 11 日的 5:30” 列印 “hello”。 特殊符号 * 期中, * 代表該位置時間機關下所有可取的值,比如第一個位置代表分,指定為 * 時就是每分鐘都執行。 是以五個星 * * * * * 表示每分鐘。 , 指定多個值時用于逗号分隔, 0,15,30 * * * *
表示當時間為 0,15 或 30 分鐘的時候執行。 - 連字元用于指定範圍, 0-15,30 * * * *
表示 0~15 之間的每分鐘,以及第 30 分鐘的時候執行。 / 除号用于設定重複的間隔, */15 * * * *
表示每個一刻鐘的時候,即 0,15,30,45 這些時刻。 它與 15 * * * * 的區分是後者表示一個值,即 15min 的時候,13:15, 12:15 這些。 非标準的字元串 還有一些友善的預設關鍵字,但這些都是非标準的,不同機器支援情況不同。 Entry | Description | Equivalent to | @yearly (or @annually) | 每年一月午夜 | 0 0 1 1 * | @monthly | 每月首日午夜 | 0 0 1 * * | @weekly | 每周天午夜 | 0 0 * * 0 | @daily (or @midnight) | 每天午夜 | 0 0 * * * | @hourly | 每小時 | 0 * * * * | @reboot | 重新開機時 | N/A | 示例:重新開機後啟動 redis @reboot /usr/local/bin/redis-server /path/to/redis.conf 一些示例 每分鐘列印日期到指定檔案, -
crontab -e 打開 job 編輯界面 - 輸入
*/1 * * * * date >> /data/home/wayongliu/foo.txt 然後 :wq 儲存退出 -
tail -f /data/home/wayongliu/foo.txt` 檢視結果 實作每隔多少秒執行 因為能設定的最小時間機關為分,需要設定每隔多少秒執行時,就需要變通來實作。 借助 sleep,可不用 crontab, 比如每 5 秒: #!/bin/bash
while true
do
/home/user/myscript.sh
sleep 5
done 也可以 sleep 與 crontab 結合來用,考慮到每 5 秒,一分鐘内即執行 12 次,可以設定 12 個 job: * * * * * /home/user/myscript.sh
* * * * * sleep 5; /home/user/myscript.sh
* * * * * sleep 10; /home/user/myscript.sh
* * * * * sleep 15; /home/user/myscript.sh
* * * * * sleep 20; /home/user/myscript.sh
* * * * * sleep 25; /home/user/myscript.sh
* * * * * sleep 30; /home/user/myscript.sh
* * * * * sleep 35; /home/user/myscript.sh
* * * * * sleep 40; /home/user/myscript.sh
* * * * * sleep 45; /home/user/myscript.sh
* * * * * sleep 50; /home/user/myscript.sh
* * * * * sleep 55; /home/user/myscript.sh 其中第一個任務會在每分鐘開始時執行, 第二個也是每分鐘開始執行,不過會 sleep 5s,是以實際是每分鐘每 5s 的時候執行, 後面的任務類似,進而達到了需要的效果。 相關資源 - 線上檢視 crontab 模式對應的執行周期
- The Ultimate Crontab Cheatsheet
- How to run a cronjob every X seconds in cron
- wikipedia - crontab
|