温馨提示×

Debian 定时器备份恢复

小樊
43
2026-01-03 09:41:58
栏目: 智能运维

Debian 定时器备份与恢复

一 适用范围与准备

  • 覆盖两类定时器:
    • cron:用户级与系统级任务(含 /etc/crontab/etc/cron.d/、以及 /var/spool/cron/crontabs/ 下的用户文件)。
    • systemd timers:以 .timer/.service 单元形式存在(常见路径 /etc/systemd/system//lib/systemd/system/)。
  • 准备与检查:
    • 确认服务运行:systemctl status cron(cron 服务),以及 systemctl list-timers --all(查看已启用的 systemd 定时器)。
    • 准备备份目录(示例:/backup/timers/),并确保有 root/sudo 权限。

二 备份步骤

  • cron 备份
    • 备份当前用户任务:crontab -l > crontab_$(date +%F).bak
    • 备份指定用户任务(root):crontab -u username -l > crontab_${username}_$(date +%F).bak
    • 备份系统级配置与目录:
      • sudo cp /etc/crontab /backup/timers/etc_crontab_$(date +%F).bak
      • sudo cp -a /etc/cron.d /backup/timers/etc_cron.d_$(date +%F)
      • 备份用户 spool(谨慎,保持权限一致):sudo cp -a /var/spool/cron/crontabs /backup/timers/crontabs_$(date +%F)
  • systemd timers 备份
    • 备份所有 timer 单元文件:sudo tar czf /backup/timers/systemd_timers_$(date +%F).tar.gz -C /etc/systemd/system/ .(如需包含 /lib/systemd/system/,可追加该路径)
    • 备份已启用定时器清单:systemctl list-timers --all --no-legend > /backup/timers/timers_list_$(date +%F).txt
    • 备份定时器日志(示例):journalctl --unit=mytimer.timer -b > /backup/timers/mytimer_$(date +%F).log
  • 建议将以上命令放入脚本统一执行,并保留时间戳,便于追溯与迁移。

三 恢复步骤

  • cron 恢复
    • 恢复当前用户任务:crontab crontab_2026-01-03.bak
    • 恢复指定用户任务(root):crontab -u username crontab_username_2026-01-03.bak
    • 恢复系统级配置与目录:
      • sudo cp /backup/timers/etc_crontab_2026-01-03.bak /etc/crontab
      • sudo cp -a /backup/timers/etc_cron.d_2026-01-03 /etc/cron.d
      • 如需恢复 spool(谨慎):sudo cp -a /backup/timers/crontabs_2026-01-03 /var/spool/cron/crontabs
    • 注意:编辑或恢复后,优先使用 crontab -e 确保权限与格式正确;直接拷入 /var/spool/cron/crontabs/ 可能引发权限问题。
  • systemd timers 恢复
    • 还原单元文件:sudo tar xzf /backup/timers/systemd_timers_2026-01-03.tar.gz -C /etc/systemd/system/
    • 重新加载 systemd 配置:sudo systemctl daemon-reload
    • 启用并启动定时器:sudo systemctl enable --now mytimer.timer
    • 如有对应服务单元,一并确认:sudo systemctl enable --now mytimer.service
    • 核对状态:systemctl status mytimer.timer;查看下次触发:systemctl list-timers --all | grep mytimer
  • 验证与回滚
    • 查看执行痕迹:
      • cron:grep CRON /var/log/syslog
      • systemd:journalctl -u mytimer.timer -b
    • 若异常,按日志修正 OnCalendar/Unit/ExecStart 等字段,或回滚到备份版本后再次 daemon-reload

四 迁移与验证清单

  • 迁移要点
    • 跨主机迁移时,同时迁移 timer 与 service 单元,保持 单元文件名一致;必要时在目标机执行 daemon-reloadenable --now
    • 确保 命令与脚本使用绝对路径,环境变量与 PATH 与源机一致;cron 任务建议将输出重定向到日志,避免邮件风暴(如:>> /var/log/backup.log 2>&1)。
  • 验证清单
    • 服务与定时器状态:systemctl status cronsystemctl list-timers --all
    • 日志核对:cron 看 /var/log/syslog,systemd 看 journalctl -u -b
    • 时间与时区:确认 timedatectl 输出正确,避免因时区偏差导致“错过触发”。

0