运维监控
Cron 表达式详解(附示例)
2026-04-25·5 min read
什么是 Cron 表达式?
Cron 表达式是一个字符串,用来定义任务在什么时间执行。它广泛用于 Linux 系统的定时任务、CI/CD 流水线、云函数调度等场景。
标准 Cron 格式
标准 Cron 表达式包含 5 个字段:
code双击代码复制
* * * * *
| | | | |
| | | | +---- 星期 (0-7, 0 和 7 都表示周日)
| | | +------ 月份 (1-12)
| | +-------- 日期 (1-31)
| +---------- 小时 (0-23)
+------------ 分钟 (0-59)每个字段可以使用的特殊字符:
示例解读
常用 Cron 表达式
扩展格式:6 位和 7 位
有些系统使用 6 位或 7 位格式,在最前面增加了秒或年。
6 位(带秒):
code双击代码复制
0 */5 * * * * 每 5 秒7 位(带秒和年):
code双击代码复制
0 0 9 * * * 2026 2026 年每天早 9 点实际应用场景
Linux Crontab
bash双击代码复制
# 每天凌晨 3 点备份数据库
0 3 * * * /usr/bin/mysqldump -u root mydb > /backup/mydb.sql
# 每周日清理日志
0 0 * * 0 rm -rf /var/log/app/*.log
# 每 10 分钟检查服务状态
*/10 * * * * /usr/local/bin/health-check.shNode.js (node-cron)
javascript双击代码复制
const cron = require('node-cron')
cron.schedule('0 9 * * *', () => {
console.log('每天早上 9 点执行')
})
cron.schedule('*/30 * * * *', () => {
console.log('每 30 分钟执行')
})GitHub Actions
yaml双击代码复制
on:
schedule:
- cron: '0 2 * * *' # 每天凌晨 2 点运行容易踩的坑
1. **时区问题**:Cron 默认使用系统时区,跨时区服务器需要注意时区转换
2. **分钟字段不能省略 `0`**:`* * * * *` 是每分钟执行,不是每小时
3. **星期和日期同时设置**:同时指定日期和星期时,满足任意一个就会执行,这可能导致预期之外的执行频率
4. **夏令时**:部分系统在夏令时切换时可能出现跳过或重复执行的情况
总结
Cron 表达式是定时任务的核心工具,语法简单但功能强大。掌握基本格式和常用模式可以覆盖绝大多数调度需求。记不住的时候,使用在线 Cron 解析工具可以快速验证表达式是否正确。