Cron

✍ dations ◷ 2025-07-22 16:50:03 #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)

相关

  • 社会性社会性动物也称为群居动物,例如人类、狗、猴子、大猩猩、蜜蜂、狮子、蚂蚁、鹦鹉。它们群族中,可能由一个到多个家庭组成。每个家庭成员各自有比较明显的地位。家猫虽然是独立
  • 探空火箭探空火箭(英语:Sounding rocket)是一种比较特殊的运载工具,它只携带科学仪器进行亚轨道飞行。探空火箭一般为无控制火箭,具有结构简单、成本低廉、发射方便等优点。它更适用于临
  • JR西日本271系电力动车组271系列车是西日本旅客铁路的一款直流电特急型列车,用于连接关西国际机场至新大阪、京都、米原的“遥号”特急列车。本列车于2020年3月14日投入服务。遥号自1994年开始运营以
  • 上钦肯山 (萨尔兹卡默古特山脉)坐标:47°40′11″N 13°20′49″E / 47.669755°N 13.347073°E / 47.669755; 13.347073上钦肯山(德语:Hoher Zinken),是奥地利的山峰,位于该国中部,由萨尔茨堡州负责管辖,属于萨尔
  • 素博通额宗室素博通额(满语:ᡠᡴᠰᡠᠨ ᠰᡠᠪᠣᡨᡠᠩᡤᡝ,转写:;1788年12月4日-1835年12月21日,乾隆五十三年十一月初七日丑时-道光十五年十一月十二日申时),字云楼。清朝宗室镶蓝旗第五族
  • 尼克·范埃克塞尔尼克·范埃克塞尔(英语:Nick Van Exel,1971年11月27日-),美国NBA联盟前职业篮球运动员。
  • 萨勒曼·本·哈马德·阿勒哈利法 (1894–1961)萨勒曼·本·哈马德·阿勒哈利法(1894年10月10日-1961年11月2日)从1942年开始担任巴林统治者,一直于1961年逝世为止都担任巴林国王,他的头衔是巴林哈基姆,在位19年。他的继任者是
  • 佐藤拓也佐藤拓也Twitter 佐藤拓也instagram 佐藤拓也blog 佐藤拓也(日语:さとう たくや,1984年5月19日-),日本男性声优兼歌手。经纪公司为贤Production。身高166公分,星座为金牛座,血型为
  • 蓝鲸游戏阴谋论蓝鲸游戏阴谋论是一个流传于互联网和媒体上的阴谋论。该阴谋论称,一种名为蓝鲸的游戏通过洗脑方式,鼓励参与者在50天内完成各种自残任务,并在第50天要求参与者自杀。该阴谋论始于2016年5月在俄罗斯报纸 Novaya Gazeta 的一篇文章,该文章将许多无关的儿童自杀事件与俄罗斯 VK 社交网络上的“F57”组织成员联系起来。然而,这篇文章后来被批评为试图在不存在因果关系的情况下建立因果关系,并且没有发现自杀是集体活动的结果。2016年俄国新报将许多彼此无关的儿童自杀和社群网站VKontakte上的“F57
  • 利氏刺鳊利氏刺鳊(学名:)为辐鳍鱼纲鲤形目雅罗鱼科刺鳊属的其中一种,分布于亚洲约旦河流域和巴勒斯坦沿海平原的Nahr al-Muqatta(奇顺河) 。另已被引入阿兹拉克湿地保护区。为特有种,本鱼细长与扁长形的身体,嘴次端位,它的裂缝延伸到鼻孔下面。咽齿5个,平滑与钩状,背鳍软条10枚;臀鳍软条12至16枚,体长可达12公分,栖息在流动缓慢的湖或溪流,生活习性不明。 维基物种上的相关信息:利氏刺鳊