Cron表达式是一种用于定时执行任务的周期性时间表达式,通常用于在Unix和类Unix系统中的命令行工具(如crontab)中设置定时任务。Cron表达式由6个字段组成,每个字段代表一个可选的值或选项,如下所示:
* * * * * command to be executed
- - - - -
| | | | |
| | | | +----- day of the week (0 - 7) (Sunday = 0 or 7)
| | | +------- month (1 - 12)
| | +--------- day of the month (1 - 31)
| +----------- hour (0 - 23)
| +------------ min (0 - 59)
+-------------- sec (0 - 59, also: 60 - 99)
秒 分 时 日 月 周几
每个字段可以是一个值、一组值、一个范围(如“1-5”)或一个步长(如“5”)。字段的含义如下:
- 第一个字段:分钟(0 - 59)
- 第二个字段:小时(0 - 23)
- 第三个字段:日期中的天(1 - 31)
- 第四个字段:月份中的天(1 - 12)
- 第五个字段:一周中的天(0 - 7,星期日为0或7)
- 第六个字段:小时(0 - 23)或分钟(0 - 59)加上步长(如“5”)
例如,以下Cron表达式将在每小时的第10分钟执行一个命令:
0 0 10 * command to be executed
在这个例子中,第一个字段的值为0,表示分钟数。第二个字段的值为0,表示小时数。第三个字段的值为10,表示该任务在每小时的第10分钟执行。因此,这个任务将在每小时的第10分钟执行。
0 0 0 * * ?
这个表达式中,秒和分都为0,时为0点,日和月都为*,表示每天都执行,周几为?,表示不指定。
Cron表达式还支持一些特殊符号,用于指定一些常用的时间规则:
- *:表示所有取值范围内的值。
- /:表示每隔多少时间执行一次任务,例如*/5表示每隔5秒执行一次任务。
- -:表示一个范围,例如1-3表示1到3的范围内的所有值。
- ,:表示一个列表,例如1,3,5表示1、3、5三个值。
- ?:表示不指定值,只能用于日和周几两个字段中的一个。
- L:表示月份或周几的最后一天,例如在日字段中使用L表示当月的最后一天,在周几字段中使用L表示当周的最后一天。
- W:表示最近工作日,例如在日字段中使用W表示最近的工作日,在周几字段中使用W表示最近的工作日。
下面是一些常用的Cron表达式示例:
- 每分钟执行一次任务:0
* * * * ?
- 每天的0点执行一次任务:
0 0 0 * * ?
- 每周一的0点执行一次任务:
0 0 0 ? * MON
- 每个月的最后一天的0点执行一次任务:
0 0 0 L * ?
总结:Cron表达式是一种非常强大的定时任务表达式,通过组合不同的字段和特殊符号,可以实现各种复杂的时间规则。在使用时需要仔细阅读文档并理解各个字段的含义和限制条件,以确保定时任务的正确执行。