CentOS 定时器备份与恢复
一 备份方案
日常备份用户级定时任务
#!/usr/bin/env bash
BACKUP_DIR="${HOME}/crontab_backup"
mkdir -p "$BACKUP_DIR"
crontab -l > "${BACKUP_DIR}/$(date '+%Y%m%d_%H%M%S').bak"
find "$BACKUP_DIR" -mtime +7 -name '*.bak' -delete
0 7 * * * /bin/bash /path/to/backup_crontab.sh
crontab -l 导出,避免权限与格式差异带来的风险。系统级定时任务与目录
tar czf /backup/cron_sys_$(date +%F).tgz /etc/crontab /etc/cron.d /etc/cron.hourly /etc/cron.daily /etc/cron.weekly /etc/cron.monthly
二 恢复方案
从备份文件恢复用户级任务
crontab /path/to/backup_2025-09-01_120000.bak
crontab -l > crontab_before_restore.bak,确认无误再导入。误删或丢失后的日志回捞
# 1) 先确认日志中是否存在该用户的任务记录
grep -i "your_user" /var/log/cron* | head
# 2) 提取 CMD 中的命令并去重(两种常见日志格式)
cat /var/log/cron* \
| grep -i "your_user" \
| grep "CMD" \
| awk -F'(' '{print $3}' \
| awk -F')' '{print $1}' \
| sort -u > crontab_recovered_cmds.txt
# 或(兼容另一种日志格式)
cat /var/log/cron* \
| grep "CMD" \
| awk -F'CMD' '{print $2}' \
| awk -F'[(|)]' '{print $2}' \
| sort -u > crontab_recovered_cmds.txt
crontab -e 或 crontab file.bak 恢复。注意:日志仅记录“执行过的命令”,可能缺少注释、环境变量与原始时间规范,需人工核对。三 迁移与多机同步
crontab file.bak 导入;系统级任务则解压到 /etc/ 对应目录。systemctl status crond(运行中再导入)crontab -ltail -f /var/log/cron四 加固与运维建议
crontab 设置别名包装,屏蔽 -r 清空操作(示例思路)# 将以下内容加入 /etc/bashrc 或 /root/.bashrc
alias crontab='/usr/local/bin/cron.sh'
在 /usr/local/bin/cron.sh 中实现“禁止 -r、每次编辑自动备份”的逻辑,再调用真正的 /usr/bin/crontab。