Cron 表达式生成器

先选 Linux、Spring 或 Quartz,按你要的时间生成表达式,再复制表达式或整行。 解释已有的表达式

解释已有的表达式

按计划写出 crontab

这一页生成 Linux crontab:五段,或 @daily 这种简写。你选多久跑一次,可以带上命令,再复制整行。不会把任务装进系统。格式也能写出 Spring 和 Quartz:前面加秒 0,Quartz 还会写 ?,星期用 MON-FRI 这种名字。要解释已有的表达式,用解释已有的表达式。时间戳用 Unix 时间戳。

怎么用

  1. 格式是 Linux Crontab(5 位)、Spring @Scheduled(6 位)或 Quartz(6–7 位)。菜单下面一行写着字段顺序,以及哪个数字是周日。计划默认是每天。时是 2,分是 0,所以表达式是 0 2 * * *,说明是每天 02:00。
  2. 计划可以是每分钟、每 N 分钟、每小时、每 N 小时、每天、按星期、按日、每年一次,或简写(@daily)。每 N 分钟会出现每隔,后面写着分钟。每小时会出现分。每 N 小时会出现分和每隔,后面写着小时。每天会出现时和分。按星期会出现时、分,以及周一到周日的按钮,至少要点亮一个。按日会出现时、分和日。每年一次还会出现月。简写里有 @reboot、@hourly、@daily、@weekly、@monthly、@yearly。这些简写只在格式为 Linux 时出现。Spring 和 Quartz 保留同一钟点,并在前面加上秒。
  3. 命令可以不填。/usr/bin/backup.sh 会接在表达式后面,成为 Crontab 行。边输入边更新默认开着。关掉之后,用生成跑一次。
  4. 复制表达式复制这五段或简写。复制整行复制表达式加上命令。复制结果复制说明和接下来 10 次运行。显示示例把按星期设成周一到周五的 02:00,命令填 /usr/bin/backup.sh,表达式是 0 2 * * 1-5,整行是 0 2 * * 1-5 /usr/bin/backup.sh。 表单下面的示例按钮还有:每 15 分钟 */15 * * * *,每天 02:00 带同一条命令 0 2 * * * /usr/bin/backup.sh,工作日 09:00 0 9 * * 1-5,周末 09:00 0 9 * * 0,6,周一、周三、周五 09:00 0 9 * * 1,3,5,每月 1 日零点 0 0 1 * *,每年 1 月 1 日 0 0 1 1 *,每 2 小时的第 30 分 30 */2 * * *,@daily,@weekly(周日 00:00),以及 @reboot。旁边的链接打开解析页。 全部清除改成每分钟并清空命令,表达式是 * * * * *。

这些字段是什么意思

表达式是分、时、日、月、星期。周日是 0,周一是 1,周六是 6。连续的星期写成连字符,周一到周五是 1-5。分开的日期用逗号,例如 1,3,5。七天都选则写成 *。格式选 Linux 时写出这五段。格式选 Spring 时在前面加 0 作为秒,星期数字不变。格式选 Quartz 时也在前面加 0,并在日或星期上写 ?,把星期数字改成 SUN–SAT,因为 Quartz 把周日编成 1。

每 N 分钟是 */N * * * *。每 N 小时是 0、N、2N 这些小时上的第 M 分:M */N * * *。31 日只在有 31 天的月份运行,二月会跳过。命令不会被检查,只能一行。页面不会把任务装进系统。

@reboot 在开机时运行,没有钟点,所以没有接下来 10 次运行。@hourly 是 0 * * * *。@daily 是 0 0 * * *。@weekly 是周日 00:00,即 0 0 * * 0,不是周一。@monthly 是 0 0 1 * *。@yearly 是 0 0 1 1 *。说明里会写等同于这五段。接下来 10 次运行用的是这台电脑的本地时间。真正跑 crontab 的机器可能在另一个时区。

会用在什么地方

  • 每天凌晨 2 点备份:0 2 * * * /usr/bin/backup.sh。
  • 工作日早上 9 点:0 9 * * 1-5。
  • 那台机器的午夜刚好合适时,用 @daily。

常见问题

为什么 @weekly 是周日?

Vixie cron 把 @weekly 定成周日 00:00。若要周一,选按星期并点亮周一。时间仍是 00:00 时,表达式是 0 0 * * 1。

这里能生成 Quartz 吗?

能。把格式改成 Quartz。每天 02:00 会变成 0 0 2 * * ?。周一到周五会写成 MON-FRI。解释已有的表达式仍用来读你贴进去的表达式。

下次运行和 UTC 对不上。

接下来 10 次运行用的是这台电脑的时钟。服务器上的 crontab 用的是服务器时区。

二月看不到 31 日。

二月没有 31 日,会跳过。列表给出下一个有这一天的月份。