1. Jenkins cron syntax
Jenkins Cron 语法遵循Cron实用程序的语法(略有不同)具体来说,每行包含由TAB或SPACE分隔的5个字段(分时日月周):
分钟(Minute) | 小时(Hour) | 日(Day of Month) | 月(Month) | 周(Day of Week) |
0-59 | 0-23 | 1-31(取决于具体月份) | 1-12 | 0-7(0和7是星期天) |
要为一个字段指定多个值,可以使用以下运算符。按优先顺序排列:
-
*
指定所有有效值 -
M-N
指定一个范围值 -
M-N/X
或*/X
以X
为间隔数在M-N(指定范围)或
*/X(整个范围)每次递增
-
A,B,…,Z
枚举多值
为了允许定期调度的任务在系统上产生均衡负载,应尽可能使用符号H(用于“hash”)。例如,使用 0 0 * * *
(每日凌晨执行)每日多个job同时执行将引起很大的高峰。而使用 H H * * *
仍然会每天执行一次。但是不会同时执行,可以更好的利用有限的资源。使用 H
可以表示一个范围。例如, H H(0-7) * * *
指每日上午12:00(午夜)至上午7:59之间的某段时间执行。H 符号可以看作是一个范围内的随机值,但它实际上是 job 名称的 hash,而不是随机函数,因此对于任何给定的项目,该值都保持稳定。
此外还支持@yearly
,@annually
,@monthly
,@weekly
,@daily
,@midnight
,@hourly 作为便利的别名,使用 hash system 保持自动平衡,
@hourly
等效于 H * * * * 表示在一个小时的任意时间,
@midnight 表示在凌晨12:00到凌晨2:59之间。
2. Jenkins cron syntax examples:
- triggers{ cron('H/15 * * * *') }(每15分钟执行一次)
- triggers{ cron('H(0-29)/10 * * * *') }(每小时的前30分钟内每10分钟执行一次)
- triggers{ cron('45 9-16/2 * * 1-5') }(从上午9:45开始每小时45分钟一次,每个工作日下午3:45结束)
- triggers{ cron('H H(9-16)/2 * * 1-5') }(每个工作日上午9点至下午5点之间每两个小时一次)
- triggers{ cron('H H 1,15 1-11 *') }(除了12月之外,每个月的1日和15日每天一次)