crom

Cron

crontab

crontab命令常见于Unix和类Unix的操作系统之中,用于设置周期性被执行的指令。该命令从标准输入设备读取指令,并将其存放于“crontab”文件中,以供之后读取和执行。该词来源于希腊语chronos(χρόνος),原意是时间。

通常,crontab储存的指令被守护进程激活,crond常常在后台运行,每一分钟检查是否有预定的作业需要执行。这类作业一般称为cron jobs。

crontab文件

crontab文件包含送交cron守护进程的一系列作业和指令。每个用户可以拥有自己的crontab文件;同时,操作系统保存一个针对整个系统的crontab文件,该文件通常存放于/etc或者/etc之下的子目录中,而这个文件只能由系统管理员来修改。

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

操作符号

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

  • 逗号(',')分开的值,例如:“1,3,4,7,8”
  • 连词符('-')制定值的范围,例如:“1-6”,意思等同于“1,2,3,4,5,6”
  • 星号('*')代表任何可能的值。例如,在“小时域”里的星号等于是“每一个小时”,等等

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

时间设置

# 文件格式说明
#  ——分钟(0 - 59)
# |  ——小时(0 - 23)
# | |  ——日(1 - 31)
# | | |  ——月(1 - 12)
# | | | |  ——星期(0 - 7,星期日=0或7)
# | | | | |
# * * * * * 被执行的命令

注:

  1. 在“星期域”(第五个域),0和7都被视为星期日。
  2. 不很直观的用法:如果日期和星期同时被设定,那么其中的一个条件被满足时,指令便会被执行。请参考下例。
  3. 前5个域称之分时日月周,可方便个人记忆。

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

crontab命令的使用

由于MAC OS自带cron,就无需在安装crond服务了。

样例:

  1. 创建一个新的crontab文件,并在文件内写入cron表达式,例如* * * * * date >> ~/tmp/ls.txt(含义为每隔一分钟将当前日期写入到ls.txt中)

    cd ~/tmp
    touch temp_cron && vim temp_cron
    
    
  2. 提交刚刚创建的crontab文件

    crontab temp_cron
    
    
  3. 列出crontab文件,可以看到* * * * * date >> ~/tmp/ls.txt

    crontab -l
    
    
  4. 查看ls.txt文件,可以看到定时任务生效

    Thu Jul 20 14:59:00 CST 2017
    Thu Jul 20 15:00:00 CST 2017
    Thu Jul 20 15:01:00 CST 2017
    Thu Jul 20 15:02:00 CST 2017
    Thu Jul 20 15:03:00 CST 2017
    Thu Jul 20 15:04:00 CST 2017
    Thu Jul 20 15:05:00 CST 2017

  5. 编辑crontab文件

    crontab -e
    
    
  6. 删除crontab文件,cron任务停止

    crontab -r
    
    

Quartz中的cron表达式

格式

格式为{秒数} {分钟} {小时} {日期} {月份} {星期} {年份(可为空)},较crontab的表达式,多了秒和年。

格式详解

字段

字段 有效范围 特殊字符
0~59 , - * /
分钟 0~59 , - * /
小时 0~23 , - * /
日期 0~31 , - * / ? L W C
0~11 , - * /
星期 1~7 或 SUN,MON,TUE,WED,THU,FRI,SAT , - * / ? L # C
年份 1970~2099 , - * /

通配符

通配符 含义
, 用来列出枚举值,例如:在分钟字段里用“5,20”意味着在5和20分每分钟会触发一次
- 指定一个值的范围
* 代表所有可能的值
/ 用来指定数值的增量例如:在分钟字段里用“0/15”表示从第0分钟开始,每15分钟
? 表示不指定值
L(Last) 用在日期表示一个月中的最后一天例如:6L,表示某月的倒数第6天用在星期表示一个月中的最后一个星期x例如:FRIL,表示某月的最后一个星期五
W(Work) 指定离给定日期最近的工作日(周一到周五)例如:在日期字段用“15W”指这个月最接近第15天的工作日,如果这个月第15天是周六,那么触发器将会在这个月第14天即周五触发如果这个月第15天是周日,那么触发器将会在这个月第16天即周一触发
C(Calendar) 指和日历关联后计算过的值例如:在日期 字段用“5C”指在这个月第5天;在星期字段用“1C”指在周日
#(No) 表示该月第几个星期x例如:4#2,表示某月的第二个星期三;6#3,表示某月的第三个星期五

注意:

  • 其中每个元素可以是一个值,一个连续区间,一个间隔时间,一个列表,通配符。
  • 由于"日期"和"星期"这两个元素互斥的,必须要对其中一个设置"?"。

常用例子

  • "0 0 12 * * ?" 每天12点触发
  • "0 0 12,20 * * ?" 每天12点和20点触发
  • "0 0/5 * * * ?" 每隔5分钟触发一次
  • "0 0 10 * * ? 2015" 2015年的每天10点触发
  • "0 15 10 ? * MON-FRI" 周一至周五的上午10:15触发
  • "0 15 10 15 * ?" 每月15日上午10:15触发
  • "0 15 10 L * ?" 每月最后一日的上午10:15触发

参照

  • 维基百科:Cron
  • linux命令大全之crontab命令使用详解
  • Cron表达式

你可能感兴趣的:(crom)