linux crontab 詳解及特殊用法

cron來源於希臘單詞chronos(意爲“時間”),是linux系統下一個自動執行指定任務的程序。例如,你想在每晚睡覺期間創建某些文件或文件夾的備份,就可以用cron來自動執行。
 
服務的啓動和停止
cron服務是linux的內置服務,但它不會開機自動啓動。可以用以下命令啓動和停止服務:
 
/sbin/service crond start
/sbin/service crond stop
/sbin/service crond restart
/sbin/service crond reload
以上1-4行分別爲啓動、停止、重啓服務和重新加載配置。
 
要把cron設爲在開機的時候自動啓動,在 /etc/rc.d/rc.local 腳本中加入 /sbin/service crond start 即可,或使用chkconfig命令。
 
查看、編輯和刪除
cron把命令行保存在crontab(cron table)文件裏,這個文件通常在 /etc 目錄下。每個系統用戶都可以有自己的crontab(在 /var/spool/cron/ 下)。
 
crontab -l 查看當前用戶的cron任務
crontab -e 編輯當前用戶的定時任務
crontab -r 刪除當前用戶的cron任務
 
如當前是root身份,要查看/編輯/刪除/某用戶的crontab,只需在相應的命令後加上 -u USERNAME 即可。
 
crontab -e -u USERNAME
 
crontab文件的默認編輯器是vi,可以輸入 export VISUAL=’editor’ 更改默認編輯器。
 
cron服務每分鐘不僅要讀一次 /var/spool/cron 目錄內的所有文件,還需要讀一次 /etc/crontab 文件。配置這個文件也能讓cron執行任務。使用crontab命令是對用戶級任務的配置,而編輯 /etc/crontab 文件是對系統級任務的配置。
 
語法說明:
 
[minute] [hour] [day of month] [month] [day of week] [program to be run]
  分鐘  小時     日期 月份    星期     命令
* * * * * command
 
以下是cron語句中的字段與字段說明:
 
字段 說明
分鐘 0-59
小時 0-23
日期 1-31
月份 1-12 或英文縮寫Jan、Feb等
星期 0-6,0爲週日;或單詞縮寫Sun、Mon等
用戶名 執行命令時以此用戶的身份
命令 要執行的命令和路徑
 
每個參數裏的取值可以有4種間隔符:
 
* 表示任意
 
- 表示範圍
 
, 表示枚舉多個值
 
/ 表示每隔
 
舉例如下:
 
30 21 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每晚的21:30重啓apache。
 
45 4 1,10,22 * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每月1、10、22日的4 : 45重啓apache。
 
10 1 * * 6,0 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每週六、週日的1 : 10重啓apache。
 
0,30 18-23 * * * /usr/local/etc/rc.d/lighttpd restart
上面的例子表示在每天18 : 00至23 : 00之間每隔30分鐘重啓apache。
 
0 23 * * 6 /usr/local/etc/rc.d/lighttpd restart
上面的例子表示每星期六的11 : 00 pm重啓apache。
 
* */1 * * * /usr/local/etc/rc.d/lighttpd restart
每一小時重啓apache
 
* 23-7/1 * * * /usr/local/etc/rc.d/lighttpd restart
晚上11點到早上7點之間,每隔一小時重啓apache
 
0 11 4 * mon-wed /usr/local/etc/rc.d/lighttpd restart
每月的4號與每週一到週三的11點重啓apache
 
0 4 1 jan * /usr/local/etc/rc.d/lighttpd restart
一月一號的4點重啓apache
 
Crontab的特殊用法
除了使用5個字段來表示時間,也可以使用“@”符號後接指定關鍵字,來表示時間。
關鍵字如下:
Keyword          Equivalent
@yearly            0 0 1 1 *
@monthly           0 0 1 * *
@weekly            0 0 * * 1
@daily             0 0 * * *
@midnight          0 0 * * *
@hourly            0 * * * *
@reboot            Run at startup
 
例子:
 
  1. # crontab -l 
  2. @midnight /sbin/ifconfig eth0 > /tmp/ifconfig_midnight_$(date +\%F) 
  3. @weekly   /sbin/ifconfig eth0 > /tmp/ifconfig_weekly_$(date +\%F-\%a) 
  4. @daily   /sbin/ifconfig eth0 > /tmp/ifconfig_daily_$(date +\%F) 
  5. @monthly   /sbin/ifconfig eth0 > /tmp/ifconfig_monthly_$(date +\%F) 
  6. @yearly   /sbin/ifconfig eth0 > /tmp/ifconfig_yearly_$(date +\%F) 
  7. @hourly   /sbin/ifconfig eth0 > /tmp/ifconfig_hourly_$(date +\%F) 
  8. @reboot   /sbin/ifconfig eth0 > /tmp/ifconfig_reboot_$(date +\%F) 
  1. # ls -l /tmp/ifconfig_*           
  2. -rw-r--r-- 1 root root 533 Apr 14 00:00 /tmp/ifconfig_daily_2013-04-14 
  3. -rw-r--r-- 1 root root 533 Apr 14 00:00 /tmp/ifconfig_hourly_2013-04-14 
  4. -rw-r--r-- 1 root root 533 Apr 14 00:00 /tmp/ifconfig_midnight_2013-04-14 
  5. -rw-r--r-- 1 root root 533 Apr 14 00:00 /tmp/ifconfig_weekly_2013-04-14-Sun 
總結
查看當前用戶的cron配置,使用 crontab -l
編輯當前用戶的cron配置,使用 crontab -e
刪除當前用戶的cron配置,使用 crontab -r
以root身份查看/編輯/刪除某用戶的cron配置,在命令後加上 -u USERNAME
配置系統級的任務,編輯 /etc/crontab 文件

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章