使用方法
- 输入或粘贴 cron 表达式,也可以选择常用的计划。
- 查看通俗易懂的说明。若字段无效,会指出字段名称和原因。
- 查看接下来的 10 次运行时间,默认使用本地时区。如果服务器使用 UTC,请切换到 UTC。
- 复制运行时间以便分享,或调整表达式,直到计划符合需求。
工作原理
标准 cron 表达式与 Linux 上 crontab 使用的格式(Vixie cron 和 cronie)相同,也广泛用于 CI 和托管服务的调度器。它由五个以空格分隔的字段组成:分钟(0–59)、小时(0–23)、月中的日期(1–31)、月份(1–12 或 JAN–DEC)和星期几(0–7 或 SUN–SAT,其中 0 和 7 都表示星期日)。每个字段都支持 *(表示所有值)、单个值、范围(如 1-5)、列表(如 1,15,30)和步长(如 */15,表示每隔 15 个值;或 9-17/2,表示从 9 到 17 每隔两小时)。名称不区分大小写。快捷写法 @yearly(或 @annually)、@monthly、@weekly、@daily(或 @midnight)和 @hourly 分别表示 0 0 1 1 *、0 0 1 * *、0 0 * * 0、0 0 * * * 和 0 * * * *。
月中的日期和星期几这两个字段有一条常让人意外的规则。如果其中任一字段以 * 开头,日期就必须同时符合两个字段。如果两个字段都有限制,则日期符合其中任一字段即可:0 0 13 * 5 会在每月 13 日以及每个星期五运行,而不只是 13 日恰逢星期五时运行。判断依据是字段是否以 * 开头,因此 */2 这样的步长也算作不受限。这符合 Vixie cron 和 cronie 的行为,但少数其他调度器的规则不同。
下次运行时间按浏览器的时区计算,也可以切换到 UTC;大多数服务器和云调度器使用 UTC。cron 本身使用运行它的机器的时区。夏令时切换期间,不同的 cron 守护进程行为可能不同;此工具会略过时钟拨快时不存在的本地时间,并将重复出现的小时列出一次。本工具不支持扩展语法:包含秒或年份的六字段或七字段 Quartz 表达式,以及特殊字符 ?、L、W 和 #。
示例
工作时间健康检查
*/15 9-17 * * 1-5 表示星期一至星期五的 09:00 到 17:59 之间,每隔 15 分钟运行一次。每天最后一次运行时间是 17:45。
每晚备份
30 2 * * * 表示每天 02:30 运行。如果服务器使用 UTC,而你位于纽约,UTC 模式下的下次运行列表会显示服务器实际采用的时间。
日期字段陷阱
0 9 1 * 1 看起来像是“每月 1 日恰逢星期一时的 9:00”,但实际上它会在每月 1 日 09:00 运行,也会在每个星期一运行。若要只在每月第一个星期一运行,请设置为 0 9 1-7 * *,并在脚本中检查星期几。
常见问题
cron 中的 */5 表示什么?
表示从该字段的最小值开始,每隔五个值运行一次。在分钟字段中,*/5 会在第 0、5、10……55 分钟运行。在小时字段中,*/5 会在 0、5、10、15 和 20 点运行,因此从 20:00 到午夜间隔的是四小时,而不是五小时。
为什么我的任务运行的日期比预期多?
当月中的日期和星期几这两个字段都有限制时,cron 会在符合其中任一字段的日期运行。例如,0 0 15 * 1 会在每月 15 日以及每个星期一运行。将其中一个字段设为 *,即可只按另一个字段匹配。
cron 使用哪个时区?
cron 守护进程所在服务器的系统时区,除非 crontab 设置了 CRON_TZ 或 TZ(cronie 支持)。云调度器通常默认使用 UTC。启用 UTC 切换开关,即可查看 UTC 服务器采用的时间。
可以使用秒字段或年份字段吗?
标准 cron 不支持。它的精度为一分钟,且使用五个字段。包含秒和年份的六字段或七字段格式属于 Quartz、Spring 等库,本工具不支持。
星期日用 0 还是 7 表示?
两者都可以。在星期几字段中,0 和 7 都表示星期日,1 表示星期一,6 表示星期六。也可以使用三字母名称 SUN 到 SAT。
隐私
表达式解析和运行时间计算均在浏览器中完成。你输入的内容不会上传、存储或纳入分析统计。