循環重復的執行計劃任務、有計劃性的執行任務,像這種任務,在linux系統中就有cron命令來完成。
linux系統下的任務調度分為兩類:系統任務調度和用戶任務調度。
/etc/crontab文件就是系統任務調度的配置文件:
[root@centos ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
# 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
[root@centos ~]#
前四行是配置crond任務運行的環境變量,第一行SHELL變量指定了使用/bin/bash,第二行PATH變量指定了系統執行命令的路徑。第三行MAILTO變量指定了cron的任務執行信息將發送給root用戶,第四行HOME變量指定了在執行命令或者腳本時使用的主目錄,
用戶任務調度:用戶頂起要執行的工作,比如用戶數據備份、定時郵件提醒等。用戶可以使用crontab工具來定制自己的計劃任務。所有用戶定義的crontab文件都被保存在/var/spool/cron/目錄中,其文件名和用戶名保持一致。
文件:
/etc/cron.deny #該文件中所列用戶不允許使用crontab命令
文件:
/etc/cron.allow #該文件中所列用戶允許使用crontab命令
文件:
/var/spool/cron/ #所有用戶crontab文件存放的目錄,以用戶名命名
crontab的使用格式:minute hour day month week command
如果minute使用*表示,則代表每分鐘,可取0-59之間的整數。一次類推。
command表示要執行的命令,可以是系統命令,也可以是自己編寫的腳本文件。
在以上各個字段中,還可以使用以下特殊字符:
星號(*):代表所有可能的值,例如month字段如果是星號,則表示在滿足其它字段的制約條件後每月都執行該命令操作。
逗號(,):可以用逗號隔開的值指定一個列表范圍,例如,“1,2,5,7,8,9”
中槓(-):可以用整數之間的中槓表示一個整數范圍,例如“2-6”表示“2,3,4,5,6”
正斜線(/):可以用正斜線指定時間的間隔頻率,例如“0-23/2”表示每兩小時執行一次。同時正斜線可以和星號一起使用,例如*/10,如果用在minute字段,表示每十分鐘執行一次。
crond服務是集成在系統上的,哪怕是安裝最小化系統,這項服務也會被安裝上。
crontab 命令格式: crontab [ –u user ] file
crontab [ -u user ] [ –e ] [ –l ] [ –r ] [ –i ]
crontab –u jack 表示使用jack這個用戶來運行命令
-e參數的意思是“編輯” -l參數的含義是“查看計劃任務” -r參數的含義是“刪除計劃任務”這個參數會刪除/var/spool/cron目錄下的所有幾乎任務。-i參數的意思是在刪除用戶的crontab文件是給確認提示。給出交互提示。
實例: 0 4 1 jan * /etc/int.d/smb restart #1月1號早上4點整重啟smb服務。
01 * * * * root run-parts /etc/cron.hourly #每小時以root用戶的身份執行/etc/cron.hourly目錄下的所有腳本。 注:如果去掉run-parts參數的話,目錄後面就必須跟上某個具體的腳本,而不能是某個文件夾。
注意:
1. 如果我們創建了一個crontab文件,但是任務無法執行,而手動執行這個任務是沒有問題的。這種情況下一般是由於在crontab文件中沒有配置環境變量引起的。
2. 注意清理系統用戶的郵件日志,每條任務調度執行完畢,系統都會將任務輸出信息通過電子郵件傳遞給用戶,改信息一般保存在/var/spool/mail目錄下。這樣日積月累,這個目錄下的日志信息會非常大,可能會影響系統的正常運行。因此將每條任務執行後進行重定向非常重要。
例:0 */3 * * * /usr/local/apache2/apachectl restart >/dev/null 2>&1
>/dev/null的意思是將輸出信息清除,2>&1的意思是將標准錯誤重定向到標准輸出,而標准輸出已經重定向到了/dev/null中,所以無論是標准輸出還是標准錯誤都會重定向到/dev/null中。
另外,新建的cron job不會立馬執行,至少要等兩分鐘才能執行,如果重啟cron才會馬上執行。
當crontab突然失效時,可以重啟cron服務;或者查看日志:tail -f /var/log/cron