如何设置Linux Trigger以实现自动备份
导读: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
