Cron工具型软件cron是一款类Unix的操作系统下的基于时间的任务管理系统。用户们可以通过cron在固定时间、日期、间隔下,运行定期任务(可以是命令和脚本)。cron常用于运维和管理,但也可用于其他地方,如:定期下载文件和邮件。cron该词来源于希腊语chronos(χρόνος),原意是时间。 通常,任务时间表(crontab)文件储存的指令被crond守护进程啟動,守护进程在后台运行,并每一分钟检查是否有定期的作业需要执行。这类作业一般称为cron jobs。 crond守护进程crond是一个用于执行周期命令的守护进程。[1]通过守护进程(
crontab命令
crontab文件crontab文件包含crond守护进程所需的一系列作业和指令。[7] crontab文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。 文件格式用户文件
# 文件格式說明 # ┌──分鐘(0 - 59) # │ ┌──小時(0 - 23) # │ │ ┌──日(1 - 31) # │ │ │ ┌─月(1 - 12) # │ │ │ │ ┌─星期(0 - 6,表示从周日到周六) # │ │ │ │ │ # * * * * * 被執行的命令 注:
從第六個域起,指明要執行的命令。 系统文件
# 文件格式說明
# ┌──分鐘(0 - 59)
# │ ┌──小時(0 - 23)
# │ │ ┌──日(1 - 31)
# │ │ │ ┌─月(1 - 12)
# │ │ │ │ ┌─星期(0 - 6,表示从周日到周六)
# │ │ │ │ │
# * * * * * 用户名 被執行的命令 系统层次的任务时间表(crontabs)的任务经常会指定一个或以上的用户进行执行,因此任务时间表(crontabs)文件需要增加“用户名”字段。[8] 表达式在一个区域里填写多个数值的方法:
非标准字符某些cron程序的扩展版本(如:Quartz Java scheduler)也支持斜线('/')操作符,用于表示跳过某些给定的数。例如,“*/3”在小时域中等于“0,3,6,9,12,15,18,21”等被3整除的数;
例子AIX系统管理员的Crontab文件#================================================================= # SYSTEM ACTIVITY REPORTS # 8am-5pm activity reports every 20 mins during weekdays. # activity reports every hour on Saturday and Sunday. # 6pm-7am activity reports every hour during weekdays. # summary prepared at 18:05 every weekday. #================================================================= 0,20,40 8-17 * * 1-5 /usr/lib/sa/sa1 1200 3 & 0 * * * 0,6 /usr/lib/sa/sa1 & 0 18-7 * * 1-5 /usr/lib/sa/sa1 & 5 18 * * 1-5 /usr/lib/sa/sa2 -s 8:00 -e 18:01 -i 3600 -ubcwyaqvm & 常見錯誤一個常見的錯誤是,命令行雙引號中使用%時,未加反斜線\,例如: # 錯誤的例子: 1 2 3 4 5 touch ~/error_`date "+%Y%m%d"`.txt 在守护进程发出的電子郵件中會見到錯誤訊息: /bin/sh: unexpected EOF while looking for `''''''' # 正確的例子: 1 2 3 4 5 touch ~/right_$(date +\%Y\%m\%d).txt 下例是另一個常見錯誤: # Prepare for the daylight savings time shift 59 1 1-7 4 0 /root/shift_my_times.sh 初看似要在四月的第一個星期日早晨1時59分運行shift_my_times.sh,但是這樣設置不對。 特殊地,當星期域(第五個域)被指定為 * 時,星期域與日域(第三個域)執行“與”操作;而當星期域(第五個域)被指定為 * 以外的内容時,星期域與日域執行“或”操作。 所以這個程序會在4月1日至7日以及4月余下的每一個星期日執行。 另一個常見錯誤是對分鐘設置的誤用。下例欲一個程序兩個小時運行一次: # adds date to a log file * 0,2,4,6,8,10,12,14,16,18,20,22 * * * date >> /var/log/date.log 而上述設置會使該程序在偶數小時内的每一分鐘執行一次。正確的設置是: # runs the date command every even hour at the top of the hour 0 0,2,4,6,8,10,12,14,16,18,20,22 * * * date >> /var/log/date.log # an even better way 0 */2 * * * date >> /var/log/date.log 不发送电子邮件如果输出结果来自crontab里的命令,那么cron守护进程会用电子邮件将它发给用户。
>/dev/null 2>&1
MAILTO="" cron命令/etc/init.d/cron reload
#Reloading configuration files for periodic command scheduler: cron.
/etc/init.d/cron stop
#Stopping cron (via systemctl): cron.service.
/etc/init.d/cron start
#Starting cron (via systemctl): cron.service.
/etc/init.d/cron restart
#Restarting cron (via systemctl): cron.service.
/etc/init.d/cron status
其他话题
参考文献
外部链接文档
软件
|
Portal di Ensiklopedia Dunia