<p>0 2 6 是每周六凌晨两点执行备份的正确 cron 表达式,其中 0 分、2 时、 日、 月、6 周(周六),配合脚本权限、绝对路径和日志重定向确保可靠运行。</p>

在 crontab 中实现“每周六凌晨两点准时备份生产数据库”,需使用标准的五段式时间格式:分 时 日 月 周,对应取值范围为:
0–59(分) 0–23(时) 1–31(日) 1–12(月) 0–7(周,0 和 7 都表示周日)
正确的时间表达式是:0 2 * * 6
说明:
- 0:第 0 分钟(即整点)
- 2:凌晨 2 点(24 小时制)
- *:每天(日字段不限定具体日期)
- *:每月(月字段不限定具体月份)
-
6:周六(注意:Linux cron 中 6 = 周六,0 或 7 = 周日;部分系统支持
Sat写法,但数字更通用稳定)
完整 crontab 条目示例
编辑用户 crontab(如用 root 执行备份):
crontab -e
添加一行(假设备份脚本为 /opt/backup/db_backup.sh):
0 2 * * 6 /opt/backup/db_backup.sh >> /var/log/db_backup.log 2>&1
关键细节:
- 确保
db_backup.sh具有可执行权限:chmod +x /opt/backup/db_backup.sh - 脚本中建议显式声明 SHELL 和 PATH(cron 环境变量精简),或使用绝对路径调用命令(如
/usr/bin/mysqldump) - 日志重定向使用
>>追加,避免覆盖;2>&1将错误也写入日志,便于排查
验证与调试小技巧
快速验证时间表达式是否符合预期:
- 用在线工具(如 crontab.guru)输入
0 2 * * 6,确认显示 “At 02:00 on Saturday” - 临时改成
0 2 * * *(每天 2 点)并加echo "test $(date)" >> /tmp/cron_test.log测试 cron 是否生效 - 检查系统时区:
timedatectl,确保服务器时间与预期一致(尤其跨时区部署时)
常见误区提醒
以下写法是错误或不可靠的:
-
0 2 * * 7:7 在多数 cron 实现中等价于 0(周日),不是周六 -
0 2 1-31 * 6:日字段冗余,* 已覆盖所有日期,无需再写 1-31 -
0 2 * * sat:虽部分 cron 支持,但并非 POSIX 标准,不同系统兼容性差,推荐用数字 6 - 忽略环境变量导致脚本内命令(如
mysqldump)找不到:务必在脚本开头设置PATH=/usr/local/bin:/usr/bin:/bin

















