如何备份 crontab(crontab -e 编辑的内容)?
备份 crontab:crontab -l > 备份文件(当前用户),或拷 /var/spool/cron/ 下按用户名命名的文件;多用户与 /etc/cron.d 别漏。本文给出脚本化备份方案。
最简单:crontab -l > crontab_backup.txt——把当前用户的任务列表导出成文件,存到安全位置即可。恢复时 crontab crontab_backup.txt。注意这只备份当前用户;系统里还有 root、其他用户的 crontab 和 /etc/cron.d/、/etc/crontab,全面备份要一并覆盖。
单用户备份与恢复
# 备份(带时间戳)
crontab -l > ~/backups/crontab-$(date +%F).txt
# 恢复
crontab ~/backups/crontab-2026-09-01.txt
备份全系统所有定时任务
#!/bin/bash
DEST=~/cron-backup-$(date +%F)
mkdir -p "$DEST"
# 所有用户的 crontab
for f in /var/spool/cron/*; do
[ -f "$f" ] && sudo cp "$f" "$DEST/user-$(basename $f).cron"
done
# 系统级
sudo cp /etc/crontab "$DEST/etc-crontab" 2>/dev/null
sudo cp -r /etc/cron.d "$DEST/cron.d"
sudo cp -r /etc/cron.daily /etc/cron.hourly /etc/cron.weekly /etc/cron.monthly "$DEST/" 2>/dev/null
echo "备份完成:$DEST"
自动化:每天自备份
把备份本身做成 cron 任务(套娃但实用):
0 4 * * * crontab -l > /backup/crontab-$(date +\%F).txt
(crontab 里的 % 要转义成 \%。)
配合版本管理更好——备份目录做成 git 仓库,每次变更可追溯:
cd /backup && git add . && git commit -m "cron backup $(date +%F)"
变更纪律建议
比备份更治本的是用代码管 cron:crontab 内容维护在配置仓库(Ansible/Salt 或纯 git + 部署脚本),服务器上的状态始终可从仓库重建,误删不慌。
观测云对照
备份只是底线,执行可见才是保障。 任务有没有按预期跑,靠观测云对任务输出日志的心跳监控确认;备份文件本身也可以纳入日志采集留档。
常见问题(FAQ)
Q:crontab -l 和 /var/spool/cron/ 文件内容一样吗?
A:内容一致;spool 文件是存储本体,但直接编辑它不走校验,日常管理一律用 crontab 命令。
Q:恢复后能立即生效吗?
A:crontab 文件 安装后立即生效,无需重启 cron 服务。
Q:迁移到新机器要注意什么?
A:除任务本身,还要迁脚本文件、依赖环境(PATH、密钥)与任务写入的目录权限。