跟cron定时任务语法基本类似
一、字段有哪些
每行包含5个字段,用制表符或空格隔开,从左至右依次是:
分 时 天 月 星期
二、每个字段的取值范围
- 分钟 (0–59)
- 时 (0–23)
- 天 (1–31)
- 月 (1–12)
- 星期 (0 和 7 都代表星期日)
三、为了每个字段可以取多个值,可以用下面操作符,按优先顺序:
• * 匹配范围内所有值
• M-N 匹配(M~N范围内的所有值)
• M-N/X or * /X 在指定区间(M~N)或者整个有效区间 * 内,每隔 X 构建一次
• A,B,...,Z 匹配多个值
四、符号 H 的用法
- 为了在系统中产生均匀的计划任务, 尽可能的使用符合H(就是Hash)
例如, 用 0 0 * * * 来执行十几个任务,将会在午夜产生较大的峰值,
相反, 用 H H * * * 在一天中仍然会执行每一个任务, 但是并不在同一时间去做,可以更好的利用有限的资源。 - 符号H可以用作一个范围.
例如, H H(0-7) * * * 代表着在凌晨0:00 到早上7:59的这段时间, 你还可以用H 代表有范围或者无范围中的 区间。 - H可以被当做一个范围内的随机值,实际上,它是一个任务的hash,并不是一个随机函数,所以对于任务项目来说, 这个值都是稳定的。
- 要注意在一个月中天的字段,短周期内例如 * /3 或者 H/3 将在接近月末的时候,因为月长的不固定,工作会不稳定。
例如,* /3 将会在一个31天的月中,第1天、第4天、第7天......、第28天、第31天执行构建,然后再下一个月继续重复执行,
hash常常会选择范围1~28天内执行,所以,H/3 在月末的3~6天里,产生运行间隙(长时间循环导致长度不一致,但是这个影响相对来说不明显) - 空行 和 以 #开头的被视为 注释
- 一些别名
@yearly, @annually, @monthly, @weekly, @daily, @midnight, and @hourly,这些使用系统默认自动匹配的时间。
比如,
@hourly 跟 H * * * * 都表示一个小时之内的任意时间.
@midnight 代表 0:00 AM and 2:59 AM 之间的时间.
例如:
* 每隔15分钟 (或许在 :07、 :22 、:37、 :52)
H/15 * * * *
*每个前半小时之内,每10分钟 (共有三次, 可能在 :04、 :14、 :24)
H(0-29)/10 * * * *
*每个工作日从早上9点45分开始到下午3点45分结束这段时间内,每间隔2小时的45分钟那一刻
45 9-16/2 * * 1-5
* 每个工作日从早上9点到下午5点这段时间内每间隔2小时之间的某刻。(或许在上午10:38, 下午12:38, 下午2:38 , 下午4:38)
H H(9-16)/2 * * 1-5
* 每月(除了12月)从1号到15号这段时间内某刻
H H 1,15 1-11 *