编辑纪律是什么
crontab 是生产配置的一部分,只是恰好以任务行的形式存在。团队里它最容易失控:没有注释、逻辑复杂、密码明文、没人知道谁改过。纪律只有四条——改前备份、注释写清责任与用途、一行只调一个脚本、逻辑全部下沉到脚本文件。
基本信息
| 用途 | 让定时任务表可维护、可交接、可回滚 |
|---|---|
| 编辑方式 | crontab -e(保存时做基本语法校验) |
| 备份方式 | crontab -l > 备份文件;恢复用 crontab 备份文件 |
| 推荐结构 | 注释块(owner、用途、时间)+ 一行调用脚本 + 显式日志重定向 |
典型使用场景
- 接手他人机器:先看注释判断任务归属与用途,再决定是否调整
- 变更前留退路:改动前导出任务表,出问题一条命令恢复
- 团队协作:owner 与用途写在注释里,减少互相覆盖与误删
- 审计追溯:任务指向版本化脚本,变更可以走代码评审记录
- 临时停用:注释掉任务行而不是删除,保留原时间与命令便于恢复
可维护的任务表模板
可维护的任务表模板
# ==== 备份任务(owner: ops, since 2026-10)====
# 每日 02:30 全量备份,日志见 /var/log/db-backup.log
30 2 * * * /opt/scripts/db-backup.sh >> /var/log/db-backup.log 2>&1
# ==== 清理任务 ====
# 每小时清理两小时前的临时文件
5 * * * * /usr/bin/find /data/tmp -type f -mmin +120 -delete
# ==== 临时停用 ====
# 30 3 * * * /opt/scripts/legacy-sync.sh备份与恢复
备份与恢复
crontab -l # 查看当前任务表
crontab -l > /opt/scripts/crontab-$(date +\%F).bak # 改前备份(% 需转义)
ls -l /opt/scripts/crontab-*.bak # 确认备份落地
crontab /opt/scripts/crontab-2026-10-01.bak # 恢复任务表书写规范
| 规范 | 做法 | 原因 |
|---|---|---|
| 块注释 | 标注 owner、用途、时间 | 交接与审计的基础信息 |
| 单一职责 | 一行只调一个脚本 | 出错范围可控,便于单独重跑 |
| 绝对路径 | 命令与脚本都用全路径 | cron 的 PATH 与登录 shell 不同 |
| 输出处理 | 显式重定向到日志文件 | 否则输出进邮件队列,丢失或堆积 |
| 备份 | 改动前导出任务表 | crontab -e 没有版本历史 |
把逻辑全部写进 /opt/scripts/*.sh:可以本地测试、可进 Git 评审、可被 shellcheck 静态检查,crontab 只保留调用行。
密码、Token、密钥不要写进 crontab:任务表对具备读权限的账号完全可见,应改为 chmod 600 的环境文件并由脚本 source。
crontab -e 保存时的校验只覆盖格式(字段数量、取值范围),命令能否真正执行仍要手动跑一次验证。