最近在学习分布式任务调度平台XXL-JOB,需要用cron
表达式执行计划任务,记一下cron怎么用吧。
整体结构
cron表达式是一个字符串,分为6或7个域,每两个域之间用空格分隔,其语法格式为:
.----------------------second
| .-------------------minute
| | .----------------hour
| | | .-------------day
| | | | .----------month
| | | | | .-------weekday
| | | | | | .----year
| | | | | | |
* * * * * * * command to be executed
每个域的取值范围
域名 | 说明 | 可取符号(仅列部分常用) |
---|---|---|
second | 秒:0~59的整数 | * - , / |
minute | 分:0~59的整数 | * - , / |
hour | 时:0~23的整数 | * - , / |
day | 日:1~31的整数 | * - , / ? L |
month | 月:1~12的整数或JAN~DEC | * - , / |
weekday | 周:1~7的整数或SUN~SAT | * - , / ? L # |
year | 年:1970~2099的整数 | * - , / |
符号的意义
*
表示可以匹配该域的所有值;例如,
0 0 13 * * ?
表示每天的13点执行一次。?
在cron表达式中必须出现且只能出现1次,用在日域或周域上,表示不确定值、不限制值;它与
*
的区别是,并不能匹配到该域上的所有值,例如指定了3月份每个周五,那么3月份的周五可能只有4个值;例如,"0 0 5 6 * ?"表示每个月6日5点钟执行而无论周几,0 0 5 ? * 3
表示每个周三5点钟执行而无论是几号。-
表示匹配该域上的一个范围;例如,
0 30 9-15 ? * *
表示每天的9:30-15:30每小时执行一次,0 1-5 * ? * 1
表示每周日每个小时的1-5分钟每分钟执行一次。,
表示枚举值;例如,
0 0 8,16,23 ? * 1,7
表示每个周六日的8点、16点、23点各执行一次。/
表示起始时间和间隔时间;例如,
0 0 3/5 * * ?
表示每天3点开始执行,每隔5个小时执行一次,即3点、8点、13点、18点、23点各执行一次,*/5 * * * * ?
表示每隔5秒钟执行一次,0 */1 * * * ?
表示每隔1分钟执行一次。#
只能用于周域上,#
后面的数字表示第几周,如果不存在这个周的值,则不执行;例如,
0 0 0 ? * 5#2
表示每个月第2个周四零点执行,15 30 6 ? * 7#5
表示每个月第5个周六6:30:15执行,如果某个月不存在第5个周六,则不执行。L
只能用于日域或周域,用于日域时表示当月最后一天,用于周域如果前面不加数字表示周六,加数字表示最后一个周值;例如,
0 0 23 L * ?
表示每月最后一天的23点执行,0 0 23 ? * L
表示每周六的23点执行,0 0 23 ? * 3L
表示每月最后一个周二的23点执行。
一些常见的实例
表达式 | 意义 |
---|---|
*/5 * * * * ? | 每隔5秒钟执行一次 |
0 */1 * * * ? | 每隔1分钟执行一次 |
0 0 1 * * ? | 每天1点执行一次 |
0 55 23 * * ? | 每天23点55分执行一次 |
0 0 23 L * ? | 每月最后一天23点执行一次 |
0 0 8 ? * L | 每周六8点执行一次 |
0 0 */2 ? * 6L | 每月最后一个周五,每隔2小时执行一次 |
0 15 10 ? * 5#3 | 每月的第三个星期五上午10:15执行一次 |
0 0-5 14 * * ? | 在每天下午2点到下午2:05期间的每1分钟执行 |
0 15 10 ? * 2-6 | 表示周一到周五每天上午10:15执行 |
0 15 10 ? * 6L | 每个月的最后一个星期五上午10:15执行 |
0 0 10,14,16 * * ? | 每天上午10点,下午2点,4点执行一次 |
0 0/30 9-17 * * ? | 朝九晚五工作时间内每半小时执行一次 |
0 0 12 ? * 4 | 每个星期三中午12点执行一次 |
0 10,44 14 ? 3 4 | 每年三月的星期三的下午2:10和2:44各执行一次 |
0 15 10 ? * 6#3 | 每月的第三个星期五上午10:15执行一次 |
0 30 2 1 * ? | 每月一日凌晨2点30执行一次 |
10,20 * * * * ? | 每分钟的第10秒与第20秒都会执行 |
0 0 0 ? * 6#2 | 每月的第2个星期的周5,凌晨执行 |