Linux crontab表达式怎么写?
Linux cron按时间规则执行命令。一条用户crontab记录由五个时间字段和后面的命令组成:前者决定什么时候运行,后者决定运行什么。Cron表达式本身不包含脚本路径,也不会创建任务。
配置数据库备份、定时同步或日志清理时,先确定频率,再检查具体执行时刻,比只看一串星号更容易发现错误。本工具针对Linux常用的五字段格式,不能直接拿来生成Java Quartz所需的六字段或七字段表达式。
从执行需求生成定时规则
- 先选常用规则,例如“每5分钟”,再调整分钟、小时等字段。
- 需要多个时刻时选择“范围或列表”;已有表达式可直接粘贴到“编辑表达式”。
- 核对未来5次执行时间。周一至周五的规则不会识别法定节假日或调休。
- 复制结果,在服务器crontab中补上要执行的命令。
五个字段与特殊符号
从左到右依次是分钟、小时、日期、月份、星期,字段之间用空格分隔。星期日可以写0或7。月份和星期可使用JAN–DEC、SUN–SAT;代码中的数字和符号请使用半角字符。
| 字段 | 取值 |
|---|---|
| 分钟 | 0–59 |
| 小时 | 0–23 |
| 日期 | 1–31 |
| 月份 | 1–12 |
| 星期 | 0–7 |
- *:该字段的所有值
- 逗号:指定多个值,例如0,30
- 短横线:包含两端的范围,例如1-5
- 斜线:在字段范围内按步长取值,例如
*/15
每5分钟、每天、每周的Cron写法
*/5匹配每小时的第0、5、10分钟等时刻,并不是从保存任务的那一刻起倒计时5分钟。下面的09:00均指调度器所在时区。
| 表达式 | 执行规则 |
|---|---|
*/5 * * * * | 每5分钟执行一次 |
30 2 * * * | 每天02:30执行 |
0 9 * * 1-5 | 周一至周五09:00执行 |
0 0 * * 0 | 每周日零点执行 |
0 0 1 * * | 每月1日零点执行 |
0 0 29 2 * | 闰年2月29日零点执行 |
把表达式加入服务器定时任务
运行crontab -e编辑当前用户的任务。下面的记录每天02:30调用一次备份脚本,时间以服务器调度器的设置为准。
建议使用绝对路径,并检查脚本权限与cron服务状态。网页上的预览只验证日历规则,不代表脚本已经安装或成功执行。
30 2 * * * /usr/local/bin/backup.shCron表达式常见问题
为什么复制六位表达式会报错?
不同调度器的格式不相同。本工具只接受Linux五字段格式,不支持秒字段、Quartz的?、L、W、#以及@reboot。@hourly、@daily、@weekly、@monthly、@yearly可转换为五字段。
日期和星期同时指定,是“且”还是“或”?
两者都被限制时按“或”匹配。例如0 9 1 * MON表示每月1日或每周一09:00执行。如果其中一个字段以*开头,包括*/2,则需要同时满足两个日期字段。
预览时间为什么和北京时间不一样?
预览固定使用UTC,不会自动切换成北京时间。表达式不包含时区,实际运行采用调度器配置;部署前应核对服务器时区。
语法正确为什么没有执行时间?
例如2月31日并不存在,语法合法也可能没有匹配日期。预览最多搜索未来8年,闰日任务可能只能列出少于5次结果。
这个工具会替我运行任务吗?
不会。表达式生成和时间计算都在浏览器本地完成,仍需自行把规则和命令部署到调度器。
