cron表达式

4 篇文章 0 订阅
1 篇文章 0 订阅

cron

cron指计划任务,是指任务在约定时间执行已经计划好的工作,在linux中,我们经常用到cron服务器来完成这个工作,cron服务器可以更具配置文件约定的时间来执行指定的任务;cron表达式则是指配置约定时间的规则。

cron表达式

cron表达式通常是一个字符串,这个字符串一般由5个或者6个空格隔开,分为6域或者7域,例如:"0 0 1 * * ?"是6域的,表示每天的凌晨1点执行一次任务;"0 0 1 * * ? 2019"是7域的,表示2019年的每天凌晨1点执行一次任务。

cron表达式值

cron表达式的每一个值代表的是什么意思呢?依顺序对应以下表格的内容:

顺序秒(Seconds)分钟(Minutes)小时(Hours)日期(DayofMonth)月份(Month)星期(DayofWeek)年份(Year)
取值范围0-590-590-231-30(31)1-12或者 JAN-DEC1-7或者 SUN-SAT (1=SUN)1970-2099
特殊字符, - * /, - * /, - * /, - * / ? L W C, - * /, - * / ? L C #, - * /
是否必须

cron表达式字符含义

  • "," 表示列出枚举值
    例如:"0 0 1,13 * * ?"表示每天的凌晨1点和下午1点分别执行一次指定任务
  • "-" 表示一段范围
    例如:"0 0 1-13 * * ?"表示从每天的凌晨1点到下午1点之间(包括凌晨1点和下午1点)每个小时都要执行一次指定任务
  • "*" 表示所在域的任意值
    例如:"0 * 1 * * ?"表示每天的凌晨1点到两点之间的每分钟都要执行一次指定任务 /:表示从起始时间开始触发,然后每隔固定的时间触发一次,例如:"0 5/10 1 * * ?"表示每天的凌晨1:05开始触发一次、然后1:15、1:25、1:35、1:45、1:55分别触发一次
  • "?" 表示所在域的任意值
    但是和*是有区别的,首先他只能在日期(DayofMonth)或者星期(DayofWeek)上使用,其次?在cron表达式中必须出现且只能出现1次,举个例子:"0 0 1 * * ?“我们知道表示的是每天的凌晨1点执行,无论是星期几,如果我们这样写"0 0 1 20 * 3”,可以发现日期(DayofMonth)与星期(DayofWeek)的域出现了冲突,因为日期(DayofMonth)设置为20日,星期(DayofWeek)设置为周三,但实际情况每个月的20日不一定就是周三。所以这两个域的设置是会互相影响的,并且必须有一个为?
  • "L"
    只能用于日期(DayofMonth)或者星期(DayofWeek),用于日期(DayofMonth)时表示当月最后一天,用于星期(DayofWeek)如果前面不加数字表示周六,加数字表示最后一个周值;例如:"0 0 1 L * ?"表示每个月最后一天的凌晨1点执行;"0 0 1 ? * L"表示每周六的凌晨1点执行;"0 0 1 ? * 4L"表示每个月最后一个周三(周日表示每周的第一天)的凌晨1点执行
  • "W"
    表示有效工作日(周一到周五),只能出现在日期(DayofMonth),系统将在离指定日期的最近的有效工作日触发事件。例如:在日期(DayofMonth)使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。如果5日是星期天,则在6日(周一)触发;如果5日在星期一到星期五中的一天,则就在5日触发。另外一点,W的最近寻找不会跨过月份
  • "C"
    (暂时没找到资料,之后补充,这个感觉也不常用)
  • "#"
    用于确定每个月第几个星期几,只能出现在星期(DayofWeek),如果不存在这个周的值,则不执行;例如:"0 0 0 ? * 5#2"表示每个月第2个周四零点执行,"15 30 6 ? * 7#5"表示每个月第5个周六6:30:15执行,如果某个月不存在第5个周六,则不执行

常用cron表达式

cron表达式含义
0 * * * * ?每分钟触发一次
0 0 * * * ?每小时触发一次
0 0 1 * * ?每天凌晨1点触发一次
0 30 1,12 * * ?每天凌晨1:30和12:30各触发一次
0 * 1,13 * * ?每天1:00到1:59以及13::00到13::59,每分钟触发一次
0 * 1 * * ?每天凌晨1:00到1:59,每分钟触发一次
0 0 * 1 * ? 2019在2019年里每个月1号的每一个小时触发一次
59 59 23 L 6 ?每年的6月的最后一天的23:59:59分触发一次
0 0 24 L * ?每个月的最后一天的24点触发一次
0 0/10 * * * ?每隔10分钟执行一次,比如从9:05开始执行,9:10、9:20、9:30…等都会触发一次
0 */10 * * * ?每隔10分钟执行一次 ,比如从9:05开始执行,9:15、9:25、9:35…等都会触发一次,和上面的区别是:起始的参照时间点不同
0 0 9-18 * * ?每天的9点到18点的每隔整点触发一次
0 0 1 ? * 4L每个月最后一个周三的凌晨1点触发一次
0 0 0 ? * 2每周一的0点触发一次
0 0 24 ? * 6每周五的24点触发一次

先就介绍到这儿,欢迎指正和补充。
Tip:推荐一个小工具,可以验证你写的cron是不是正确的,也可以帮助你写出你需要的任何cron表达式:cron小工具

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值