《鳥哥的Linux私房菜》之定時任務crontab
linux下迴圈執行某個任務的命令是crontab 其背後是crond服務做支援
如果想要定時執行一個任務,可以使用crontab命令
crontab -e 直接編輯
0 0 * * * /root/soft/one.sh
上面的意思是每天凌晨執行 /root/soft/one.sh這個指令碼
# 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 # | | | | | # * * * * * command to be executed
*代表任何時刻都能接受,就像上面的那樣,任何天,任何個月,任何周都能執行one.sh這個指令碼
其中最後一個0-7有8個取值,0和7都代表週日
,代表時間間隔的意思
eg: 0 3,5,7 * * * /root/soft/one.sh 表示每天的3、5、7點的第一分鐘起執行one.sh
- 代表時間段
eg:0 3-8 * * * * /root/soft/one.sh 表示每天的3、4、5、6、7、8點的第一分鐘執行one.sh指令碼
/ 表示每個N個時間單位執行一次
eg: */5 * * * * /root/soft/one.sh 表示每隔5分鐘執行一次/root/soft/one.sh
crontab -l 可以直接檢視當前使用者的定時任務
如果想要取消就直接crontab -e刪除自己的定時任務即可
設定允許的使用者即哪些使用者可以使用,哪些使用者不能使用
白名單:/etc/cron.allow 若不在這個檔案中就不能使用crontab
黑名單:/etc/crond.deny 若在這個檔案中就不能使用crontab
一般情況下在/etc/目錄下只留一個檔案
建立crontab 任務後,這些任務會被記錄到/etc/spool/cron/username檔案中 其中username是當前使用者的使用者名稱
此外。crontab的任務的日誌會被記錄到/var/log/cron這個檔案中
以上說的都是基於個人使用者的定時任務,如果說有一個系統級別的定時任務,那麼應該怎麼辦呢?
系統級別的定時任務在 /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
*/1 * * * * root /root/soft/one.sh
其中:
shell 表示用的是哪種shell
PATH:指shell的搜尋路徑,說白了就是環境變數
MAILTO:表示如果如果定時任務發生異常,傳送郵件給誰
還有一種系統級別的定時任務就是編輯一個新檔案放到 /etc/cron.d/目錄下
新檔案格式如下
*/10 * * * * user-name /root/soft/one.sh
和上面的格式一樣
這就是Linux的crontab定時任務