备份范围与思路
备份与恢复的常用命令
crontab -l > /backup/crontab_bak/crontab_$(date +%F).baksudo crontab -l > /backup/crontab_bak/root_crontab_$(date +%F).baksudo cp -a /etc/crontab /backup/crontab_bak/crontab_$(date +%F).baksudo cp -a /etc/cron.d /backup/crontab_bak/cron.d_$(date +%F)sudo cp -a /var/log/cron /backup/crontab_bak/cron_$(date +%F).logtar czf /backup/crontab_bak/crontab_bak_$(date +%F).tar.gz -C /backup/crontab_bak .crontab /backup/crontab_bak/crontab_2025-08-15.baksudo crontab /backup/crontab_bak/root_crontab_2025-08-15.baksudo cp /backup/crontab_bak/crontab_2025-08-15.bak /etc/crontab 与 sudo cp -a /backup/crontab_bak/cron.d_2025-08-15 /etc/cron.dcrontab -l、cat /etc/crontab、ls /etc/cron.dsudo tail -f /var/log/cron自动化备份脚本示例
#!/bin/bash
set -euo pipefail
BAK_DIR="/backup/crontab_bak"
DATE=$(date +%F)
KEEP_DAYS=7
# 创建备份目录
mkdir -p "$BAK_DIR"
# 备份当前用户与 root 的 crontab
crontab -l > "$BAK_DIR/crontab_$DATE.bak" 2>/dev/null || true
sudo crontab -l > "$BAK_DIR/root_crontab_$DATE.bak" 2>/dev/null || true
# 备份系统级任务与日志
sudo cp -a /etc/crontab "$BAK_DIR/crontab_$DATE.bak"
sudo cp -a /etc/cron.d "$BAK_DIR/cron.d_$DATE"
# 可选:备份日志(若日志轮转导致当天文件不存在,可跳过或改为拷贝归档)
sudo cp -a /var/log/cron "$BAK_DIR/cron_$DATE.log" 2>/dev/null || true
# 打包归档
tar czf "$BAK_DIR/crontab_bak_$DATE.tar.gz" -C "$BAK_DIR" .
# 清理超过保留天数的备份
find "$BAK_DIR" -name "crontab_bak_*.tar.gz" -mtime +$KEEP_DAYS -delete
find "$BAK_DIR" -name "crontab_*.bak" -mtime +$KEEP_DAYS -delete
find "$BAK_DIR" -name "root_crontab_*.bak" -mtime +$KEEP_DAYS -delete
find "$BAK_DIR" -name "cron.d_*" -mtime +$KEEP_DAYS -delete
find "$BAK_DIR" -name "cron_*.log" -mtime +$KEEP_DAYS -delete
echo "Crontab backup completed: $BAK_DIR/crontab_bak_$DATE.tar.gz"
chmod +x /opt/backup/crontab_backup.shecho "0 2 * * * /opt/backup/crontab_backup.sh >> /var/log/crontab_backup.log 2>&1" | sudo tee /etc/cron.d/crontab_backupcrontab -u <user> -l。校验与注意事项
ls -lh /backup/crontab_bak/ 与 tar tzf /backup/crontab_bak/*.tar.gzcrontab -l 与备份文件对比;系统级文件与 /etc/crontab、/etc/cron.d/ 一致。tail -f /var/log/cron 与脚本日志 /var/log/crontab_backup.log。/var/log/cron-*)或确保备份在轮转前执行。sudo systemctl reload crond),并在非生产时段操作,避免任务重复执行。