Linux下的任務調度分為兩類:系統任務調度和用戶任務調度。
系統任務調度:系統周期性所要執行的工作,比如寫緩存數據到硬盤、日志清理等。在/etc目錄下有一個crontab文件,這個就是系統任務調度的配置文件。
[root@localhost ~]# cat /etc/crontab SHELL=/bin/bash # 第一行SHELL變量指定了系統要使用哪個shell,這里是bash PATH=/sbin:/bin:/usr/sbin:/usr/bin # 第二行PATH變量指定了系統執行命令的路徑 MAILTO=root # 第三行MAILTO變量指定了crond的任務執行信息將通過電子郵件發送給root用戶,如果MAILTO變量的值為空,則表示不發送任務執行信息給用戶 HOME=/ # 第四行的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
用戶任務調度:用戶定期要執行的工作,比如用戶數據備份、定時郵件提醒等。用戶可以使用crontab工具來定制自己的計划任務。所有用戶定義的crontab文件都被保存在/var/spool/cron目錄中。其文件名與用戶名一致。crontab使用者權限文件如下:
/etc/cron.deny # 該文件中所列用戶不允許使用crontab命令,一個用戶占據一行 /etc/cron.allow # 該文件中所列用戶允許使用crontab命令,一個用戶占據一行,此文件不存在,可以新建 /var/spool/cron/ # 所有用戶的crontab文件的存放目錄,以用戶名命名
使用方式:
crontab-1[user]-列出用戶目前的crontab. crontab-e[user]-編輯用戶目前的crontab. crontab-r[user]-刪除用戶目前的crontab.
用戶所建立的crontab文件中,每一行都代表一項任務,每行的每個字段代表一項設置,它的格式共分為六個字段,前五段是時間設定段,第六段是要執行的命令段。
注意:與系統調度有些許不同,少一個指定user-name用戶的字段列,格式如下:
# Example of job definition: # .---------------- minute (0 - 59) # minute:表示分鍾,可以是從0到59之間的任何整數。 # | .------------- hour (0 - 23) # hour:表示小時,可以是從0到23之間的任何整數。 # | | .---------- day of month (1 - 31) # day:表示日期,可以是從1到31之間的任何整數。 # | | | .------- month (1 - 12) # month:表示月份,可以是從1到12之間的任何整數。 # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) # week:表示星期幾,可以是從0到7之間的任何整數,這里的0或7代表星期日。 # | | | | | # minute hour day month week command to be executed # 順序:分 時 日 月 周 要執行的命令
在以上各個字段中,還可以使用以下特殊字符:
星號(*):當 minute 為 * 時表示每分鍾都要執行 command,hour 為 * 時表示每小時都要執行程序,其余類推。
中杠(-):當 minute 為 a-b 時表示從第 a 分鍾到第 b 分鍾這段時間內要執行,hour 為 a-b 時表示從第 a 到第 b 小時都要執行,例如“2-6”表示“2,3,4,5,6”,其余類推。
斜杠(/):當 minute 為 */n 時表示每 n 分鍾個時間間隔執行一次,例如*/10,表示每十分鍾執行一次。hour 為 */n 表示每 n 小時個時間間隔執行一次,例如*/2,表示每兩小時執行一次,其余類推。
逗號(,):當 minute 為 a, b, c,... 時表示第 a, b, c,... 分鍾要執行,hour 為 a, b, c,... 時表示第 a, b, c...個小時要執行,例如,“1,2,5,7,8,9”,其余類推。
操作實例匯總:
每1分鍾執行一次command * * * * * command 每小時的第3和第15分鍾執行 3,15 * * * * command 在上午8點到11點的第3和第15分鍾執行 3,15 8-11 * * * command 每隔兩天的上午8點到11點的第3和第15分鍾執行 3,15 8-11 */2 * * command 每個星期一的上午8點到11點的第3和第15分鍾執行 3,15 8-11 * * 1 command 每晚的21:30重啟smb 30 21 * * * /etc/init.d/smb restart 每月1、10、22日的4 : 45重啟smb 45 4 1,10,22 * * /etc/init.d/smb restart 每周六、周日的1:10重啟smb 10 1 * * 6,0 /etc/init.d/smb restart 每天18 : 00至23 : 00之間每隔30分鍾重啟smb 0,30 18-23 * * * /etc/init.d/smb restart 每星期六的晚上11:00 pm重啟smb 0 23 * * 6 /etc/init.d/smb restart 每一小時重啟smb * */1 * * * /etc/init.d/smb restart 晚上11點到早上7點之間,每隔一小時重啟smb * 23-7/1 * * * /etc/init.d/smb restart 每月的4號與每周一到周三的11點重啟smb 0 11 4 * mon-wed /etc/init.d/smb restart 一月一號的4點重啟smb 0 4 1 jan * /etc/init.d/smb restart 每小時執行/etc/cron.hourly目錄內的腳本 01 * * * * root run-parts /etc/cron.hourly
以上內容參考網上資料:
http://man.linuxde.net/crontab
http://www.cnblogs.com/b028/archive/2011/01/07/1930243.html