首页主机资讯如何设置Linux Trigger以实现自动备份

如何设置Linux Trigger以实现自动备份

时间2025-12-05 22:33:04发布访客分类主机资讯浏览604
导读:Linux 下实现自动备份的两种常用触发方式 定时触发:用 Cron 按计划执行备份脚本,适合日常、周期性备份。 事件触发:用 inotify 监听目录变化,实时触发 rsync 同步,适合对变更敏感的数据。 方案一 定时触发 Cro...

Linux 下实现自动备份的两种常用触发方式

  • 定时触发:用 Cron 按计划执行备份脚本,适合日常、周期性备份。
  • 事件触发:用 inotify 监听目录变化,实时触发 rsync 同步,适合对变更敏感的数据。

方案一 定时触发 Cron 备份

  • 安装与准备
    • 安装 cron:Debian/Ubuntu 执行:sudo apt-get install cron;RHEL/CentOS 执行:sudo yum install crontabs
    • 启动与开机自启:Debian/Ubuntu 可用 sudo systemctl enable --now cron;RHEL/CentOS 可用 sudo systemctl enable --now crond
    • 新建备份脚本(示例为打包 /home 并按日期命名):
      sudo mkdir -p /var/backups
      sudo tee /usr/local/bin/backup_home.sh >
          /dev/null <
          <
          'EOF'
      #!/usr/bin/env bash
      set -Eeuo pipefail
      BACKUP_DIR="/var/backups"
      SRC="/home"
      DATE=$(date +%F_%H%M%S)
      OUT="$BACKUP_DIR/home_$DATE.tar.gz"
      
      mkdir -p "$BACKUP_DIR"
      tar -czf "$OUT" -C "$SRC" .
      find "$BACKUP_DIR" -name "home_*.tar.gz" -mtime +7 -delete
      echo "$(date) 备份完成: $OUT" >
          >
           "$BACKUP_DIR/backup.log"
      EOF
      sudo chmod +x /usr/local/bin/backup_home.sh
      
  • 添加定时任务
    • 编辑当前用户的计划任务:crontab -e
    • 示例 1:每天 02:00 执行
      0 2 * * * /usr/local/bin/backup_home.sh
      
    • 示例 2:每周六 01:00 执行
      0 1 * * 6 /usr/local/bin/backup_home.sh
      
  • 常用时间写法速查
    • 每天 02:00:**0 2 * * ***
    • 每周六 01:00:0 1 * * 6
    • 每 10 分钟:***/10 * * * ***
  • 验证与排错
    • 查看任务:crontab -l
    • 查看日志:Debian/Ubuntu 查看 /var/log/syslog;RHEL/CentOS 查看 /var/log/cron
    • 若脚本在命令行可运行而 cron 不执行,优先使用命令的绝对路径,并在脚本开头加载环境,例如:
      . /etc/profile
      . ~/.bash_profile
      
    • 新任务通常需等待≥2 分钟才会首次触发。

方案二 事件触发 inotify + rsync 实时备份

  • 适用场景
    • 源目录频繁变更,需要近实时将数据同步到备份机或备份目录。
  • 基本思路
    • 在“源端”用 inotifywait 监听 create、modify、delete 等事件,触发 rsync 增量同步到“目标端”。
  • 快速示例(单机目录 → 备份目录)
    sudo apt-get install -y inotify-tools rsync    # Debian/Ubuntu 示例
    # RHEL/CentOS 可用: sudo yum install -y inotify-tools rsync
    
    mkdir -p /opt/backup_script
    tee /opt/backup_script/rsync_inotify.sh >
        /dev/null <
        <
        'EOF'
    #!/usr/bin/env bash
    set -Eeuo pipefail
    SRC="/data"
    DST="/opt/backup_rsync"
    LOG="/var/log/rsync_inotify.log"
    
    mkdir -p "$DST" "$LOG_DIR"
    
    inotifywait -m -r -e create,modify,delete,move \
      --timefmt '%F %T' --format '%T %w%f %e' "$SRC" | while IFS= read -r line;
         do
      echo "[$(date '+%F %T')] $line" >
        >
         "$LOG"
      rsync -a --delete "$SRC/" "$DST/"
    done
    EOF
    chmod +x /opt/backup_script/rsync_inotify.sh
    # 以后台方式运行(生产建议配合 systemd 或 supervise 管理)
    nohup /opt/backup_script/rsync_inotify.sh &
        
    
  • 远程备份示例(源端推送至备份服务器)
    # 备份服务器(接收端)准备密码文件与权限
    sudo mkdir -p /etc/rsyncd
    echo "BACKUP_PASS=YourStrongPass" | sudo tee /etc/rsyncd/rsyncd.secrets >
        /dev/null
    sudo chmod 600 /etc/rsyncd/rsyncd.secrets
    
    # 源端事件触发同步(示例)
    inotifywait -m -r -e create,modify,delete,move \
      --timefmt '%F %T' --format '%T %w%f %e' /data | while IFS= read -r line;
         do
      rsync -avz --delete /data/ backup_user@192.0.2.10::backup_module \
        --password-file=/etc/rsyncd/rsyncd.secrets
    done
    
  • 提示
    • 为避免事件风暴,可在脚本中对 rsync 做节流(如 sleep、合并事件)。
    • 生产环境建议将 inotify 脚本交由 systemd 托管并设置自动重启

关键注意事项与加固建议

  • 使用绝对路径调用命令与脚本(如 /usr/bin/tar、/usr/local/bin/backup_home.sh),并在脚本开头加载环境,避免因 cron 环境变量缺失导致失败。
  • 日志与保留策略:在脚本中记录时间戳结果;用 find … -mtime +N -delete 控制历史备份数量,避免磁盘被占满。
  • 权限与安全:备份目录与脚本仅对必要用户可读写;涉及远程传输时,优先使用SSH 密钥或受限的 rsync 模块与最小权限账户。
  • 监控与告警:结合 logrotate 轮转日志,必要时接入 邮件/企业微信/钉钉 告警或 Prometheus Node Exporter 自定义指标监控备份结果文件是否按时生成。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何设置Linux Trigger以实现自动备份
本文地址: https://pptw.com/jishu/765214.html
Linux系统中如何查看日志 如何通过防火墙设置CentOS Telnet访问

游客 回复需填写必要信息