别再手动传代码了!用Ubuntu的rsync+crontab,5分钟搞定两台服务器文件夹自动同步

张开发
2026/6/10 18:01:23 15 分钟阅读
别再手动传代码了!用Ubuntu的rsync+crontab,5分钟搞定两台服务器文件夹自动同步
彻底告别手动同步Ubuntu服务器自动化文件同步实战指南每次手动在两台服务器之间同步代码和配置文件时那种重复劳动的疲惫感是否让你抓狂作为开发者或运维工程师我们经常需要在多台Ubuntu服务器间保持文件一致性——无论是开发环境同步、数据备份还是代码部署。传统的手动scp或cp命令不仅效率低下还容易出错。本文将带你用rsynccrontab构建一个全自动、免密、定时同步的解决方案从此解放双手。1. 为什么选择rsynccrontab组合在Linux生态中文件同步工具众多但rsync以其增量同步和高效传输特性脱颖而出。与简单的cp/scp命令相比rsync只传输变化的部分大幅减少网络带宽消耗和同步时间。当结合crontab的定时任务功能后这套组合能实现定时自动触发按预设时间间隔自动执行同步增量传输仅同步变更文件节省时间和带宽保持属性保留文件权限、时间戳等元数据断点续传网络中断后可恢复传输实际测试表明对于包含1000个小文件(总计200MB)的目录rsync的首次同步时间与scp相当但后续同步(仅修改了5个文件)仅需2秒而scp仍需完整传输所有文件。2. 环境准备与基础配置2.1 安装必要软件包在两台Ubuntu服务器上执行以下命令安装rsync和sshpasssudo apt update sudo apt install -y rsync sshpass注意虽然可以直接在命令行中使用密码但更安全的做法是配置SSH密钥认证。本文为简化流程使用sshpass生产环境建议改用密钥对。2.2 测试rsync基本功能先验证rsync能否正常工作从源服务器同步到目标服务器rsync -avz --progress /path/to/source/ userdestination:/path/to/target/常用参数说明-a归档模式(保留权限等属性)-v详细输出-z传输时压缩--progress显示传输进度3. 实现免密自动同步3.1 使用sshpass绕过密码提示虽然SSH密钥更安全但在某些受限环境中可以使用sshpass临时解决密码问题sshpass -p your_password rsync -avz /source/ userhost:/target/安全警告命令行中直接暴露密码存在风险仅限测试环境使用。实际部署时应设置专用低权限账号使用SSH密钥认证或通过环境变量传递密码3.2 路径结尾斜杠的玄机rsync对路径结尾的斜杠处理非常关键源路径格式同步效果/path/to/folder同步整个folder目录到目标位置/path/to/folder/仅同步folder目录下的内容到目标位置错误示例# 错误会将整个source_dir作为子目录复制到target下 rsync -av /source_dir userhost:/target # 正确只同步source_dir下的内容到target rsync -av /source_dir/ userhost:/target/4. 配置crontab定时任务4.1 crontab基础语法编辑当前用户的crontabcrontab -e定时任务格式* * * * * command_to_execute ┬ ┬ ┬ ┬ ┬ │ │ │ │ │ │ │ │ │ └── 星期几 (0 - 6) (0是周日) │ │ │ └──── 月份 (1 - 12) │ │ └────── 日 (1 - 31) │ └──────── 小时 (0 - 23) └────────── 分钟 (0 - 59)4.2 实用的同步频率示例每5分钟同步一次*/5 * * * * sshpass -p pass rsync -avz --delete /src/ userhost:/dst/每天凌晨3点同步0 3 * * * rsync -avz -e ssh -i /path/to/key /src/ userhost:/dst/每周一早上6点并删除目标端多余文件0 6 * * 1 rsync -avz --delete /src/ userhost:/dst/4.3 日志记录与监控为便于排查问题建议将同步结果重定向到日志文件*/10 * * * * rsync -avz /src/ userhost:/dst/ /var/log/rsync.log 21关键监控点最后一次成功同步时间同步文件数量变化网络传输速率波动5. 高级技巧与故障排查5.1 带宽限制与网络优化在大文件同步时可使用--bwlimit防止占用全部带宽rsync -avz --bwlimit1000 /src/ userhost:/dst/ # 限制为1000KB/s其他优化参数--compress-level3调整压缩级别--partial保留部分传输的文件--timeout30设置超时时间(秒)5.2 常见错误解决方案问题1ssh: connect to host xxx port 22: Connection timed out检查防火墙设置确认SSH服务正常运行验证网络连通性问题2rsync: failed to set times on /path/: Operation not permitted添加--no-times参数临时解决或检查目标目录权限设置问题3同步后文件权限改变确保使用-a参数检查两端用户的UID/GID是否一致5.3 双向同步方案虽然rsync本身是单向同步但可以通过两个反向任务实现准双向同步服务器A同步到服务器B*/5 * * * * rsync -avz /data/ userB:/backup/A_to_B/服务器B同步到服务器A*/7 * * * * rsync -avz /data/ userA:/backup/B_to_A/注意真正的双向同步推荐使用专门工具如Unison以避免版本冲突。6. 安全加固方案6.1 改用SSH密钥认证生成密钥对ssh-keygen -t ed25519复制公钥到目标服务器ssh-copy-id userremote_host测试无密码登录ssh userremote_host6.2 限制rsync命令权限通过--rsh限制可执行的远程命令rsync -avz -e ssh -i /path/to/key -o RemoteCommand/usr/bin/rsync --server --sender -vlogDtprze.iLsf . /target/ /src/ userhost:6.3 敏感信息处理对于包含密码或密钥的配置文件使用--exclude跳过敏感文件同步前用ansible-vault等工具加密设置严格的文件权限rsync -avz --exclude*.key --exclude*.env /src/ userhost:/dst/在实际项目部署中我们团队发现将这套同步机制与CI/CD流程结合能显著提升部署效率。特别是处理微服务架构下的多环境配置同步时自动化方案比手动操作减少了约70%的配置错误。一个典型的应用场景是开发环境的配置变更后自动同步到测试环境再通过审批流程同步到生产环境。这种自动化流水线不仅可靠还能完整记录每次变更的来源和时间。

更多文章