linux和java中cron表达式总结

Linux 的 Crontab

Linux 下的 Crontab 表达式有五个域,分表表示:分钟、小时、日期、月、星期。

# For details see man 4 crontabs
# Example of job definition:
# .---------------- minute (0 - 59)
# |  .------------- hour (0 - 23)
# |  |  .---------- day of month (1 - 31)
# |  |  |  .------- month (1 - 12) OR jan,feb,mar,apr ...
# |  |  |  |  .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
# |  |  |  |  |
# *  *  *  *  * user-name  command to be executed

特殊字符

在每个域中除了指定特定值外,还可以使用如下特殊字符:

  • 星号(*):代表所有可能的值,例如月域如果是星号,则表示在满足其它字段的制约条件后每月都执行该命令操作。

  • 逗号(,):代表枚举值,可用来隔开指定一个列表范围,例如,“1,2,5,7,8,9”

  • 中杠(-):可以用整数之间的中杠表示一个整数范围,例如“2-6”表示“2,3,4,5,6”

  • 正斜线(/):可以用正斜线指定时间的间隔频率,例如“0-23/2”表示每两小时执行一次。同时正斜线可以和星号一起使用,例如 */10,如果用在 minute 字段,表示每十分钟执行一次。

java中的 cron

java中对cron表达式进行了扩展,在spring和quartz中对其进行了支持。Spring 的 cron 表达式有六个域,quartz中支持七个域(最后一位年是可选的)。

分别表示:秒、分钟、小时、日期、月份、星期、[年]

Java(Spring)
    *    *    *    *    *    *
    -    -    -    -    -    -
    |    |    |    |    |    |
    |    |    |    |    |    +----- day of week (0 - 7) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat
    |    |    |    |    +---------- month (1 - 12) OR jan,feb,mar,apr ...
    |    |    |    +--------------- day of month (1 - 31)
    |    |    +-------------------- hour (0 - 23)
    |    +------------------------- min (0 - 59)
    +------------------------------ second (0 - 59)
Java(Quartz)
    *    *    *    *    *    *    *
    -    -    -    -    -    -    -
    |    |    |    |    |    |    |
    |    |    |    |    |    |    + year [optional]
    |    |    |    |    |    +----- day of week (1 - 7) sun,mon,tue,wed,thu,fri,sat
    |    |    |    |    +---------- month (1 - 12) OR jan,feb,mar,apr ...
    |    |    |    +--------------- day of month (1 - 31)
    |    |    +-------------------- hour (0 - 23)
    |    +------------------------- min (0 - 59)
    +------------------------------ second (0 - 59)

特殊字符

同样的,每个域也可以使用特殊字符,特殊字符:【*】,【,】,【-】,【/】与 Crontab 含义一样,除此之外还支持另外一些特殊字符:

  • (?):也表示任意值,只能用在“日期”和“星期”域,当这两个域其中之一使用了【*】后,为了避免冲突,需要将另一个域的值设为【?】。

  • (L):表示最后,Last 的意思,只能出现在“星期”和“日期”域,如果在“星期”域使用 5L,则表示在最后的一个星期四触发。

  • (W):表示有效工作日(周一到周五),只能出现在日期域,系统将在离指定日期的最近的有效工作日触发事件。

  • (LW):这两个字符可以连用,表示在某个月最后一个工作日,即最后一个星期五。例如:在日期域使用 5W,如果 5 日是星期六,则将在最近的工作日:星期五,即 4 号触发;如果 5 日是星期天,则在 6 日触发;如果 5 日在星期一到星期五中的一天,则就在 5 日触发。另外一点,W 的最近寻找不会跨过月。

  • (#):用于确定每个月第几个星期几,只能出现在“星期”域。例如在 6#3,表示某月的第三个星期五。

示例

0 0 10,14,16 * * ?:每天上午 10 点,下午 2 点,4 点

0 0/30 9-17 * * ?:朝九晚五工作时间内每半小时

0 0 12 ? * WED:表示每个星期三中午 12 点

0 0 12 * * ?:每天中午 12 点触发

0 15 10 ? * *:每天上午 10:15 触发

0 15 10 * * ?:每天上午 10:15 触发

0 15 10 * * ? *:每天上午 10:15 触发

0 15 10 * * ? 2005:2005 年的每天上午 10:15 触发

0 * 14 * * ?:在每天下午 2 点到下午 2:59 期间的每 1 分钟触发

0 0/5 14 * * ?:在每天下午 2 点到下午 2:55 期间的每 5 分钟触发

0 0/5 14,18 * * ?:在每天下午 2 点到 2:55 期间和下午 6 点到 6:55 期间的每 5 分钟触发

0 0-5 14 * * ?:在每天下午 2 点到下午 2:05 期间的每 1 分钟触发

0 10,44 14 ? 3 WED:每年三月的星期三的下午 2:10 和 2:44 触发

0 15 10 ? * MON-FRI:周一至周五的上午 10:15 触发

0 15 10 15 * ?:每月 15 日上午 10:15 触发

0 15 10 L * ?:每月最后一日的上午 10:15 触发

0 15 10 ? * 6L:每月的最后一个星期五上午 10:15 触发

0 15 10 ? * 6L 2002-2005:2002 年至 2005 年的每月的最后一个星期五上午 10:15 触

0 15 10 ? * 6#3:每月的第三个星期五上午 10:15 触发

在线工具:https://tool.lu/crontab/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

赶路人儿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值