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
例子:
- # crontab -l
- @midnight /sbin/ifconfig eth0 > /tmp/ifconfig_midnight_$(date +\%F)
- @weekly /sbin/ifconfig eth0 > /tmp/ifconfig_weekly_$(date +\%F-\%a)
- @daily /sbin/ifconfig eth0 > /tmp/ifconfig_daily_$(date +\%F)
- @monthly /sbin/ifconfig eth0 > /tmp/ifconfig_monthly_$(date +\%F)
- @yearly /sbin/ifconfig eth0 > /tmp/ifconfig_yearly_$(date +\%F)
- @hourly /sbin/ifconfig eth0 > /tmp/ifconfig_hourly_$(date +\%F)
- @reboot /sbin/ifconfig eth0 > /tmp/ifconfig_reboot_$(date +\%F)
- # ls -l /tmp/ifconfig_*
- -rw-r--r-- 1 root root 533 Apr 14 00:00 /tmp/ifconfig_daily_2013-04-14
- -rw-r--r-- 1 root root 533 Apr 14 00:00 /tmp/ifconfig_hourly_2013-04-14
- -rw-r--r-- 1 root root 533 Apr 14 00:00 /tmp/ifconfig_midnight_2013-04-14
- -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 文件