crontab是一個用來設定、刪除或顯示供守護進程cron執行的定時任務的命令。每一個使用者都可以擁有屬於自己的定時任務,定時任務檔案預設以使用者名稱命名,並放在/var/spool/cron目錄,該目錄普通使用者無存取權限。
可以通過cron.allow 和 cron.deny檔案管理使用者使用crontab的許可權。如果cron.allow存在,使用者必須列在其中才會被允許使用cron;如果cron.deny存在,被列在其中的使用者禁止使用cron;如果兩者都不存在,只有超級使用者才能使用cron。在CentOS中,這兩個檔案放在/etc中,預設只存在cron.deny檔案,且為空白。這就表示在CentOS中,預設所有的使用者均有cron的使用許可權。
1. 命令格式
crontab [-u user] file crontab [-u user] [-l | -r | -e] [-i] [-s] crontab -n [ hostname ] crontab -c
2. 命令功能
為個人使用者維護定時任務檔案
3. 命令選項
-u user
編輯某個使用者的cron,只用root可以使用此參數為別的使用者佈建cron服務。也可用於給使用者指定crontab檔案。
-l
列出目前使用者的crontab。
-r
刪除目前使用者的crontab。
-e
編輯目前使用者的crontab,預設使用vi,或者是由 VISUAL或EDITOR環境變數指定的編輯器。
-i
與-r一起使用,用來詢問使用者是否直接刪除crontab。
4. 執行個體
執行個體1:列出目前使用者的定時任務
[22:30:17][dodmaster@mha3 ~]$ crontab -l
0 1 * * 1 $HOME/.DailyShell/hislogclear.sh
0 * * * * $HOME/.DailyShell/mvcdr2bak.sh $HOME/data/message/voice
20 * * * * $HOME/.DailyShell/mvcdr2bak.sh $HOME/data/message/data/
40 * * * * $HOME/.DailyShell/mvcdr2bak.sh $HOME/data/message/sms/
執行個體2:root使用者編輯使用者martin的定時任務
[22:30:17][root@mha3 ~]# crontab -u martin -e
執行個體3:為使用者martin指定定時任務檔案
[22:30:17][root@mha3 ~]# crontab -u martin martincron
5. cron檔案文法
首先,我們開啟/etc/crontab檔案,我們將會看到如下內容:
[20:40:30][dodmaster@mha3 etc]$ cat /etc/crontab SHELL=/bin/bashPATH=/sbin:/bin:/usr/sbin:/usr/binMAILTO=rootHOME=/# 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
該檔案是存放系統執行的定時計劃,其中前四行用於設定cron服務啟動並執行環境變數:SHELL、PATH、HOME分別指定了cron服務運行時的SHELL環境變數、PATH環境變數和HOME環境變數,這裡不再贅述。MAILTO則表示cron啟動並執行任務輸出以電子郵件的形式發送到指定使用者,如果該變數的值為空白,則不會發送郵件。餘下幾行的內容說明了系統定時任務的具體書寫格式。
1)星號(*)表示取值範圍內的所有值。例如,*在hour的位置,表示每小時執行一次。
2)連字號(-)表示一個範圍。例如,8-12表示8、9、10、11、12。
3)逗號(,)表示分割指定的數值。例如:3,5-7,9表示3,5,6,7,9。
4)正斜杠(/)表示步進值。例如,分鐘的位置為*/5,表示每五分鐘執行一次。
除了root使用者以外的所有使用者定義的crontab計劃任務都存放在/var/spool/cron目錄,通過crontab -e命令編輯,格式與/etc/crontab相同,可以不用指定user-name。
cron服務會每分鐘檢查一次/etc/crontab、/etc/cron.d/和/var/spool/cron/中的所有檔案,並依此執行。
6. 執行個體
執行個體1:每周末的淩晨一點鐘執行一次系統的raid-check
0 1 * * Sun root /usr/sbin/raid-check
執行個體2:每天的4:02am分root使用者執行/etc/cron.daily目錄下的所有指令碼,run-parts參數表示執行後面目錄中的所有指令碼。
02 4 * * * root run-parts /etc/cron.daily
執行個體3:每天的8-18每四小時,dodmaster使用者執行hislogclear.sh指令碼,即8:44,12:44,16:44,20:44四個時間點,會執行該指令碼。
[21:57:56][dodmaster@mha3 ~]$ crontab -l
44 8-20/4 * * * $HOME/.DailyShell/hislogclear.sh
執行個體4:每五分鐘執行一次(兩種寫法)
*/5 * * * * echo "every five minute to do it" >> time.txt
5 * * * * echo "every five minute to do it" >> time.txt
執行個體5:每個工作日下午八點執行
0 20 * * 1-5 echo "every workday 20:00 to do it" >> time.txt
執行個體6:每分鐘的30秒時執行,因為cron服務是每分鐘被喚醒一次,所以要執行精確到秒的任務需要藉助sleep命令。
* * * * * sleep 30; echo "every minute 30 second to do it" >> time.txt
執行個體7:每20秒執行一次,即表示在每分鐘的0秒、20秒、40秒各執行一次(也可以是其他的步長是20秒的值,例如:5s、25s、45s)
* * * * * echo "every 20 second to do it" >> time.txt
* * * * * sleep 20; echo "every 20 second to do it" >> time.txt
* * * * * sleep 40; echo "every 20 second to do it" >> time.txt
以上所述是小編給大家介紹的Linux命令下crontab命令,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對雲棲社區網站的支援!