Cron表达式构建器

只需通过下拉菜单和数值输入选择分钟、小时、日期、月份和星期,即可自动生成cron表达式。可即时预览生成的cron字符串、通俗语言的说明文字,以及接下来5次执行时间,方便编写crontab或GitHub Actions的定时任务。

常用调度速查表

以下是典型调度场景对应的cron表达式列表。点击某一行即可将其作为预设应用到上方的构建器中。

预设名称 cron表达式 含义
每天凌晨0点 0 0 * * * 每天0点0分(凌晨)执行。
工作日9点 0 9 * * 1-5 工作日(周一至周五)的9点执行。
每小时第0分钟 0 * * * * 每小时的第0分钟执行一次。
每周一 0 0 * * 1 每周一0点0分执行。

什么是 cron 表达式

cron 表达式是告诉 UNIX 系类系统的任务调度器「何时执行」的五个数值字段。从左到右依次是 分、时、日(日期)、月、星期,以空格分隔,例如 `30 3 * * 1` 表示「每周一凌晨 3 点 30 分」。这套写法很精简,但缺点也在于此:写错的字段在语法上往往仍然成立,于是任务安静地在错误的时间运行,往往要过很久才被发现。

本工具让你为五个字段分别从「每次」「指定值」「列表」「范围」「间隔」五种模式中选择,并同时显示生成的 cron 表达式与它的文字解读。由于可以在同一个画面上完成「输入→表达式」与「表达式→说明」两个方向的核对,在把它放上服务器之前就能确认写出来的是不是想要的。所有处理都在浏览器内完成,输入的内容不会被发送出去。

cron 表达式的组建方法

  1. 从预设出发 从「每天午夜 0 点」「工作日 9 点」「每小时整点」「每周一」四个预设中挑最接近的,各字段会随之填好。比从零开始更快,也更不容易写错。
  2. 为每个字段选择模式 在分、时、日、月、星期上分别选择每次(*)、指定值、列表、范围或间隔(*/n)。用不到的字段保持「每次」即可。
  3. 输入数值 列表用逗号分隔,范围填起点与终点,间隔填每隔几个执行一次。分为 0〜59,时为 0〜23,日为 1〜31,月为 1〜12,星期为 0〜6(0 表示星期日)。
  4. 核对表达式与说明 把画面上的 cron 表达式与下方的文字说明对照着读。若说明与本意不符,就回头修正对应的字段。
  5. 贴进 crontab 确认无误后复制表达式,用 `crontab -e` 打开表格,把它放在一行的开头,后面写上要执行的命令。

用好本工具的小技巧

  • 将星期字段设置为"范围"模式并选择1到5,即可一步生成"周一至周五"的工作日调度。
  • "列表"模式可以用逗号分隔输入多个值,例如在分钟字段输入"0,15,30,45",效果等同于每15分钟执行一次。
  • 如果日期字段和星期字段都被设置为"每次(*)"以外的值,按照标准cron规范,两者是"或"的关系——只要满足其中一个条件就会执行。
  • 生成的cron表达式可以通过"复制"按钮复制到剪贴板,直接粘贴到crontab或GitHub Actions的YAML文件中使用。
  • 点击预设按钮,或点击下方速查表中的某一行,都可以一键将常见调度应用到构建器中。

这些场景下会用到

安排备份与批处理的时间

数据库导出与日志汇总通常安排在访问少的深夜。不必先回想语法,就能组出「每天凌晨 3 点 5 分」这样的设定。

只在工作日运行时

把星期字段设为 1〜5 的范围即可限定为工作日。cron 并不知道法定假日,若需要排除,请在脚本内部自行判断。

读懂别人写的表达式时

接手的服务器 crontab 里出现 `*/15 2-5 * * *` 这样的写法时,在这里重现同样的设定并读说明,就不会会错意。

用于 CI 与容器的排程设定时

GitHub Actions 的 `schedule` 与 Kubernetes 的 CronJob 使用同样的五字段写法。不过它们通常以 UTC 运行,记得把时字段按时差平移。

cron 的相关术语

cron
UNIX 系类系统上在指定时刻自动执行命令的常驻程序。设定写在每个使用者各自的 crontab 表格里。
crontab
既指排程表本身,也指用来编辑它的命令(`crontab -e`)。每一行由「cron 表达式 + 要执行的命令」组成。
星号(*)
表示该字段的「所有取值」。分字段为 * 就是每分钟,月字段为 * 就是每个月。
间隔(*/n)
每隔 n 个取值执行一次的写法。分字段的 `*/15` 表示 0 分、15 分、30 分、45 分。起点一定是该字段的最小值,并非「距上次执行 n 分钟后」。
列表与范围
列表是用逗号并列取值(`1,15`),范围是用连字号相连(`9-17`)。两者也可以混写,例如 `1-5,10`。
同时指定日与星期
在多数 cron 实现中,若日字段与星期字段都不是 *,则会在**任一方符合**的日子执行,而不是两者同时符合。因此 `0 0 1 * 1` 的意思是「每月 1 日,以及每周一」,这个组合常常造成意料之外的执行。

常见问题

crontab条目是由5个用空格分隔的字段组成的字符串:分、时、日、月、星期。本工具让你通过下拉菜单或数值输入分别选择每个字段,自动为你组装这5个字段,因此无需记忆语法就能生成正确的cron表达式。

将星期字段设置为"指定值"模式并选择1(星期一),即可生成"0 0 * * 1",只匹配周一。如果需要调整具体时刻,也请将分钟、小时字段设置为"指定值"模式。

将星期字段设置为"范围"模式,从1(星期一)到5(星期五)。但cron本身没有节假日的概念,如果需要排除法定节假日,需要在脚本中另外编写判断逻辑。

可以。它生成的是标准5字段格式(兼容Vixie cron)的cron表达式,因此可以直接用于Linux服务器的crontab、GitHub Actions的schedule、Kubernetes的CronJob等采用相同5字段cron语法的多种环境。
工具君

闲话 ― 为什么"写"cron表达式比"读"更难

cron表达式看似只要记住5个字段就能写出来,但真正动手写时,往往需要回忆"*/15"和"1-30/5"哪个才是正确写法、星期是从0开始还是从1开始等细节,出错的概率意外地高。相反,理解一段已有cron表达式的含义(本站的Cron表达式解析器所承担的任务)相对机械,只需按顺序逐个字段理解即可。

本工具正是着眼于这种不对称性,专注于支持"从UI选择构建"cron表达式这一方向的操作。用户可以通过下拉菜单和数值输入直接表达意图(例如"想在工作日9点执行"),工具会自动组装出满足该意图的cron表达式,从而彻底免除记忆语法的负担。

作为确认生成结果是否符合预期的最后一步,本工具还提供了接下来5次执行时间的预览功能。尤其是当日期字段和星期字段同时被限制时会构成容易被忽视的"或"条件,能够直接看到实际的候选执行时间,有助于提前发现执行频率与预期不符的问题。