最近在学习分布式任务调度平台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的整数* - , /

符号的意义

  1. * 表示可以匹配该域的所有值;

    例如,0 0 13 * * ?表示每天的13点执行一次。

  2. ?在cron表达式中必须出现且只能出现1次,用在日域或周域上,表示不确定值、不限制值;

    它与*的区别是,并不能匹配到该域上的所有值,例如指定了3月份每个周五,那么3月份的周五可能只有4个值;例如,"0 0 5 6 * ?"表示每个月6日5点钟执行而无论周几,0 0 5 ? * 3表示每个周三5点钟执行而无论是几号。

  3. - 表示匹配该域上的一个范围;

    例如,0 30 9-15 ? * *表示每天的9:30-15:30每小时执行一次,0 1-5 * ? * 1表示每周日每个小时的1-5分钟每分钟执行一次。

  4. , 表示枚举值;

    例如,0 0 8,16,23 ? * 1,7表示每个周六日的8点、16点、23点各执行一次。

  5. / 表示起始时间和间隔时间;

    例如,0 0 3/5 * * ?表示每天3点开始执行,每隔5个小时执行一次,即3点、8点、13点、18点、23点各执行一次,*/5 * * * * ?表示每隔5秒钟执行一次,0 */1 * * * ?表示每隔1分钟执行一次。

  6. # 只能用于周域上,#后面的数字表示第几周,如果不存在这个周的值,则不执行;

    例如,0 0 0 ? * 5#2表示每个月第2个周四零点执行,15 30 6 ? * 7#5表示每个月第5个周六6:30:15执行,如果某个月不存在第5个周六,则不执行。

  7. 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,凌晨执行
最后修改:2020 年 11 月 04 日 10 : 02 AM