crontab异机同步核心是“本地定时触发+安全传输+环境可控”,需先配置ssh免密登录,再封装带日志、容错和校验的rsync脚本,并在crontab中显式声明shell与path以确保环境一致。

用 Crontab 实现 Linux 异机同步,本质是“本地定时触发 + 安全传输 + 环境可控”。不依赖额外平台,靠原生工具就能跑稳。关键不在命令多炫,而在免密通、路径对、脚本稳、环境明。
先打通 SSH 免密通道
这是自动化的前提——没有它,crontab 会卡在密码输入环节,任务直接失败。
- 在源服务器生成密钥:
ssh-keygen -t ed25519(一路回车即可) - 把公钥复制到目标服务器:
ssh-copy-id user@backup-ip - 手动验证是否成功:
ssh user@backup-ip ls /backup—— 能立刻列出目录即通过 - 若目标禁用密码登录,请确认其
/etc/ssh/sshd_config中含PubkeyAuthentication yes
写一个带日志和容错的 rsync 脚本
别把 rsync 命令直接塞进 crontab。封装成脚本能查、能调、能追责。
- 新建脚本,如
/usr/local/bin/sync-to-backup.sh,开头固定写:#!/bin/bash - 显式声明 PATH:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin; export PATH - 定义变量:源路径、目标地址(
user@ip:/path)、日志路径、时间戳 - rsync 命令推荐加这些参数:
-avz --delete --exclude='temp/' --exclude='logs/' -e "ssh -o StrictHostKeyChecking=no" - 用
$?判断执行结果,成功写“同步完成”,失败写“同步失败”并附错误码到日志 - 给脚本加执行权限:
chmod +x /usr/local/bin/sync-to-backup.sh - 手动运行一次,检查远程目录更新、日志落盘、压缩包可解压
让 Crontab 在正确环境下运行
crond 启动时环境极简,PATH 和 SHELL 都和你登录时不一致,容易找不到 rsync 或 bash 特性报错。
- 编辑定时任务:
crontab -e - 在文件最顶部添加两行:
PATH=/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin
- 再添加任务行,例如每天凌晨 2:15 执行:
15 2 * * * /usr/local/bin/sync-to-backup.sh >> /var/log/sync.log 2>&1 - 避免用
*/5 * * * *这类高频任务,除非明确需要;常规备份建议按天或按周
加一层简单但有效的校验机制
同步完成≠数据可靠。加点轻量检查,能早发现问题。
- 脚本末尾可加一句:
ssh user@backup-ip "ls -lh /backup/latest.tar.gz 2>/dev/null | wc -l",返回 1 表示文件存在 - 定期手动抽查远程文件 md5:
ssh user@backup-ip "md5sum /backup/data_$(date -d 'yesterday' +\%Y\%m\%d).tar.gz" - 在日志里记录每次同步前后的源/目标文件数:
find /data -type f | wc -l和ssh user@backup-ip "find /backup -type f | wc -l" - 磁盘空间预警可加在脚本中:
df -h /backup | awk 'NR==2 {print $5}' | sed 's/%//',超 85 就发提示











