1. 什么是Cron
Cron是一个用于在特定时间或间隔执行任务的计划任务工具。它在Unix、Linux和类Unix系统中广泛使用。使用Cron,您可以设置一个称为Cron job的任务,指定任务在何时、何地和以何种频率运行。这些任务可以是运行脚本、执行命令、发送电子邮件等等。Cron基于时间表达式来确定任务何时运行,这些时间表达式指定了任务应在何时、何日、何月等运行。Cron是一个非常有用的工具,可用于自动化重复性的计划任务。。Cron表达式是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:
- 秒 分 小时 日期 月 周几 年
- 秒 分 小时 日期 月 周几
2. Cron表达式的结构
Cron表达式由6个字段组成,每个字段表示任务的不同时间维度。
以下是Cron表达式的结构:
- 秒(0-59)
- 分钟(0-59)
- 小时(0-23)
- 日期(1-31)
- 月份(1-12或JAN-DEC)
- 星期(0-7或SUN-SAT,其中0和7都表示星期日)
这些字段使用空格或特定符号进行分隔,例如:
* * * * * *
在这个例子中,每个字段都使用通配符"*",表示每一秒、每一分钟、每一小时、每一天、每一月和每一周都执行任务。
您也可以使用逗号分隔符来指定多个值,例如:
0,15,30,45 * * * * *
这表示任务在每小时的0分、15分、30分和45分时执行。
另外,还可以使用连字符(-)来指定一个范围,例如:
10-30 * * * * *
这表示任务在每小时的第10分钟到第30分钟之间的每一分钟都执行。
此外,还可以使用斜杠(/)指定一个步长,例如:
0/5 * * * * *
这表示任务每5分钟执行一次,从0分钟开始。
通过结合使用不同的字段值和特殊符号,您可以创建出各种不同的时间模式,以满足您的计划任务需求。
3. 特殊字符
Cron中有一些特殊字符,用于指定特定的时间模式或范围。以下是一些常用的特殊字符:
星号(*):表示匹配该字段的所有可能值。例如,使用""表示该字段的所有可能秒、分钟、小时等。
逗号(,):用于指定多个值。可以使用逗号将多个值分开,表示任务在这些值所代表的时间点执行。例如,"1,3,5"表示任务在第1、第3和第5个值所代表的时间点执行。
连字符(-):用于指定一个范围。可以使用连字符指定一个值的范围,表示任务在该范围内的时间点执行。例如,"10-15"表示任务在第10到第15个值所代表的时间点执行。
斜杠(/):用于指定步长。可以使用斜杠指定一个值的步长,表示任务按照指定的步长间隔执行。例如,"*/5"表示任务每隔5个值执行一次。
问号(?):通常用于表示某个字段不确定的值,或者在某些情况下用于替代星期字段。在日和星期字段中,使用问号表示任意值或无关紧要的值。
L:用于表示字段的最后一个值。在日期和星期字段中,使用"L"表示最后一天或最后一个星期。例如,"L"表示每个月的最后一天,"5L"表示每个月的最后一个星期五。
W:用于表示最近的工作日(周一至周五)。在日期字段中,使用"W"表示最接近指定日期的工作日。例如,"15W"表示离指定日期最近的工作日。
#:用于表示某个月份的第几个星期几。在星期字段中,使用"#"指定某个月份的第几个星期几。例如,"2#3"表示某个月份的第三个星期二。
4. 常用表达式例子
每小时的第30分钟执行一次:
30 * * * * *
每天的凌晨1点执行一次:
0 1 * * * *
每周一的凌晨2点执行一次:
0 2 * * 1 *
每月的第一天的凌晨3点执行一次:
0 3 1 * * *
每天的上午9点到下午5点之间,每隔30分钟执行一次:
0/30 9-17 * * * *
每周一至周五的上午10点和下午2点各执行一次:
0 10,14 * * 1-5 *
每天的上午8点和下午8点各执行一次:
0 8,20 * * * *