Cron

✍ dations ◷ 2025-04-29 23:18:11 #Cron

工具型软件cron是一款类Unix的操作系统下的基于时间的任务管理系统。用户们可以通过cron在固定时间、日期、间隔下,运行定期任务(可以是命令和脚本)。cron常用于运维和管理,但也可用于其他地方,如:定期下载文件和邮件。cron该词来源于希腊语chronos(χρόνος),原意是时间。

通常,任务时间表(crontab)文件储存的指令被crond守护进程激活,守护进程在后台运行,并每一分钟检查是否有定期的作业需要执行。这类作业一般称为cron jobs。

crond是一个用于执行周期命令的守护进程。通过守护进程(/lib/systemd/system/crond.service )形式运行的cron程序称为crond。 cron会通过以下路径查找crontabs:

crontab 命令用于维护每个用户的任务时间表(crontab)文件。

crontab 命令用于安装任务时间表(crontab)文件,删除和列举 crond守护进程已经在使用的任务时间表(crontab)。每个用户都会拥有自己独自的任务时间表(crontab),这些文件会存放在/var/spool/目录下,不建议用户直接修改这些文件。MLS模式下的SELinux,你可以为这些任务时间表(crontab)分等级。

crontab文件包含crond守护进程所需的一系列作业和指令。

crontab文件的每一行均遵守特定的格式,由空格或tab分隔为数个领域,每个领域可以放置单一或多个数值。

/var/spool/cron/下的任务时间表(crontab)文件是用户层次的,格式如下:

# 文件格式說明# ┌──分鐘(0 - 59)# │ ┌──小時(0 - 23)# │ │ ┌──日(1 - 31)# │ │ │ ┌─月(1 - 12)# │ │ │ │ ┌─星期(0 - 6,表示从周日到周六)# │ │ │ │ │# *  *  *  *  * 被執行的命令

注:

从第六个域起,指明要执行的命令。

/etc/crontab/etc/cron.d/目录下的任务时间表(crontabs)文件是系统层次的,格式如下:

# 文件格式說明# ┌──分鐘(0 - 59)# │ ┌──小時(0 - 23)# │ │ ┌──日(1 - 31)# │ │ │ ┌─月(1 - 12)# │ │ │ │ ┌─星期(0 - 6,表示从周日到周六)# │ │ │ │ │# *  *  *  *  *  用户名 被執行的命令

系统层次的任务时间表(crontabs)的任务经常会指定一个或以上的用户进行执行,因此任务时间表(crontabs)文件需要增加“用户名”字段。

在一个区域里填写多个数值的方法:

某些cron程序的扩展版本(如:Quartz Java scheduler)也支持斜线('/')操作符,用于表示跳过某些给定的数。例如,“*/3”在小时域中等于“0,3,6,9,12,15,18,21”等被3整除的数;

 #================================================================= #      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
# 使用單引號也可以解决問題:1 2 3 4 5 touch ~/error_$(date '+%Y%m%d').txt
# 使用單引號就不用加反斜線了。這個例子會產生這樣一個文件~/error_200643.txt1 2 3 4 5 touch ~/error_$(date '+%Y%m%d').txt

下例是另一个常见错误:

# Prepare for the daylight savings time shift59 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 hour0 0,2,4,6,8,10,12,14,16,18,20,22 * * * date >> /var/log/date.log
# an even better way0 */2 * * * date >> /var/log/date.log

不发送电子邮件

如果输出结果来自crontab里的命令,那么cron守护进程会用电子邮件将它发给用户。

>/dev/null 2>&1
  • 在常用的Vixie cron中,也可以在文件的开始部分加入命令来关闭所有命令的邮件输出:
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

其他话题

  • At:在未来某个时间运行一个作业。
  • Anacron(英语:Anacron):runs job on a periodic interval, anachronistically.
  • Launchd(英语:Launchd):Mac OS X/Darwin cron替代版本。
  • Unix程序列表

参考文献

  1. ^ daemon to execute scheduled commands. (原始内容存档于2019-12-18). 
  2. ^ DESCRIPTION of cron. (原始内容存档于2019-12-18). 
  3. ^ Cron checks these files and directories:. (原始内容存档于2019-12-18). 
  4. ^ /etc/cron.d/ a directory for storing system crontabs.. (原始内容存档于2019-12-08). 
  5. ^ crontab命令的名字章节. (原始内容存档于2020-02-03). 
  6. ^ crontab命令的描述. (原始内容存档于2020-02-03). 
  7. ^ A crontab file contains instructions for the cron(8) daemon. (原始内容存档于2019-12-08). 
  8. ^ Jobs in /etc/cron.d/. (原始内容存档于2019-12-08). 

外部链接

文档

  • Crontab : Scheduling Tasks(页面存档备份,存于互联网档案馆)
  • Computer Hope(页面存档备份,存于互联网档案馆) Linux / UNIX中crontab的用法
  • Opengroup's crontab specification(页面存档备份,存于互联网档案馆) - UNIX 03正式文档
  • Crontab - Reference and Examples at mkaz.com(页面存档备份,存于互联网档案馆)

软件

  • Cron for Windows
  • CVSweb for FreeBSD's cron - Paul Vixie的1993 Vixie cron 3.0版本修补了一些错误
  • fcron(页面存档备份,存于互联网档案馆) - vixiecron / anacron的增强版本(GPL)

相关

  • 公顷公顷(hectare)为面积的公制单位(国际单位),为国际单位制并用单位之一。国际上,缩写为ha;在中国大陆的法定缩写为hm²。一块面积一公顷的土地,大约与标准足球场近似,此外,公顷也称为(HA)
  • 睡眠剥夺睡眠剥夺(英语:sleep deprivation),又称作睡眠不足(英语:insufficient sleep)可以是长期的,也可以是短期的。长期的睡眠不足可能会导致疲劳、白天昏昏欲睡、反应迟钝、体重增加或减
  • 历届冠军欧洲歌唱大赛历届冠军列表列出欧洲歌唱大赛历届冠军。欧洲歌唱大赛是欧洲广播联盟主办的一项歌唱比赛,自1956年开始举办,是同类型比赛中规模最大。参赛国家派出一位歌手或一组
  • 沃思堡沃斯堡(或译渥斯堡,英语:Fort Worth;又名福和市)是美国得克萨斯州的第六大城市,塔兰特县的首府。位于达拉斯以西30英里,并与之构成全美大都会区。根据2000年的人口统计,人口有534,69
  • 笠智众笠智众(1904年5月12日-1993年3月16日),出身于熊本县熊本市。日本著名男演员,以演出小津安二郎的电影出名。由1928年至1992年最少出演155部电影,包括小津的《东京物语》 (1953年)
  • 电弧炉电弧炉(electric arc furnace,简称EAF)是一种透由电弧放电来传递热能给材料的加热炉。工业用电弧炉处理量小至铸造厂(英语:Foundry)造铸铁产品用的1吨,大至炼钢厂次级制钢(英语:Ste
  • 吉尔·圣约翰吉尔·圣约翰(英语:Jill St. John,1940年8月19日-),美国的女演员,代表作是007系列的《金钢钻》,身材姣好,36C罩杯的大美胸更是性感撩人,为当代知名艳星。曾经在智力测验中测出智商有16
  • 荒谬荒谬(Absurdism),又译荒谬主义,哲学术语,字源是拉丁文的absurdus,意为音乐上的“不合调”,在存在主义中用来形容生命无意义、矛盾的、失序的状态。一个事物的基本意义的存在必须要
  • 王明贞王明贞(1906年11月18日-2010年8月28日),生于江苏苏州,中国物理学家,清华大学第一位女性教授。是乔治·乌伦贝克的学生。毕业于燕京大学、金陵女子大学、密歇根大学,毕业后曾在麻省
  • 杨新鸣杨新鸣(1957年1月14日-),陕西西安人,中国大陆男演员,西安话剧院演员,一级演员。