<p>用crontab定时同步网站静态文件到备份服务器的核心是“rsync增量同步+crontab自动触发”,需先配置免密SSH登录,再编写含--delete和--exclude选项的rsync脚本并添加日志,最后通过绝对路径设置crontab任务(如0 2 * /opt/web-sync.sh)并定期验证日志与执行结果。</p>

用 crontab 定时同步网站静态文件到备份服务器,核心是“rsync 增量同步 + crontab 自动触发”,不需要复杂服务部署,SSH 通了就能跑。
确认基础条件
确保两台服务器之间已建立免密 SSH 登录(这是最简、最稳的方式):
- 在源服务器(网站所在机器)上执行
ssh-keygen -t rsa生成密钥对 - 用
ssh-copy-id user@backup-server-ip把公钥推送到备份服务器 - 手动测试:
ssh user@backup-server-ip能直接登录,不输密码才算成功
写一个安全可靠的 rsync 同步脚本
在源服务器上创建脚本(比如 /opt/web-sync.sh),内容如下:
- 指定源目录(网站静态文件路径,如
/var/www/html/)和目标路径(备份服务器上的存放位置) - 使用
--delete保持目标与源完全一致(慎用,建议先试运行加--dry-run) - 加上
--exclude排除临时文件、日志、缓存等非静态内容(例如--exclude='logs/' --exclude='cache/') - 添加简单日志记录,便于排查问题
示例脚本片段:
#!/bin/bash SOURCE="/var/www/html/" DEST="user@backup-server-ip:/backup/www-$(date +%Y%m%d)/" LOG="/var/log/web-sync.log" <p>echo "[$(date)] 开始同步..." >> $LOG rsync -avz --delete --exclude='logs/' --exclude='tmp/' "$SOURCE" "$DEST" >> $LOG 2>&1 echo "[$(date)] 同步完成。" >> $LOG
设置 crontab 定时任务
给脚本加执行权限:chmod +x /opt/web-sync.sh
编辑定时任务:crontab -e,添加一行:
- 每天凌晨 2 点执行:
0 2 * * * /opt/web-sync.sh - 每周日凌晨 3 点执行:
0 3 * * 0 /opt/web-sync.sh - 注意:crontab 中的路径要用绝对路径,避免环境变量缺失导致脚本失败
验证与维护
同步不是设完就完事,需定期检查:
- 用
crontab -l确认任务已生效 - 查看日志文件(
/var/log/web-sync.log)确认每次执行是否成功、有无警告 - 手动运行脚本一次:
/opt/web-sync.sh,观察终端输出和目标目录变化 - 备份目录建议按日期命名(如上面示例中的
www-20260611),方便回溯,也利于后续用find清理旧备份

















