news 2026/5/28 4:03:57

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

作者头像

张小明

前端开发工程师

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

彻底告别手动同步:Ubuntu服务器自动化文件同步实战指南

每次手动在两台服务器之间同步代码和配置文件时,那种重复劳动的疲惫感是否让你抓狂?作为开发者或运维工程师,我们经常需要在多台Ubuntu服务器间保持文件一致性——无论是开发环境同步、数据备份还是代码部署。传统的手动scp或cp命令不仅效率低下,还容易出错。本文将带你用rsync+crontab构建一个全自动、免密、定时同步的解决方案,从此解放双手。

1. 为什么选择rsync+crontab组合?

在Linux生态中,文件同步工具众多,但rsync以其增量同步高效传输特性脱颖而出。与简单的cp/scp命令相比,rsync只传输变化的部分,大幅减少网络带宽消耗和同步时间。当结合crontab的定时任务功能后,这套组合能实现:

  • 定时自动触发:按预设时间间隔自动执行同步
  • 增量传输:仅同步变更文件,节省时间和带宽
  • 保持属性:保留文件权限、时间戳等元数据
  • 断点续传:网络中断后可恢复传输

实际测试表明,对于包含1000个小文件(总计200MB)的目录,rsync的首次同步时间与scp相当,但后续同步(仅修改了5个文件)仅需2秒,而scp仍需完整传输所有文件。

2. 环境准备与基础配置

2.1 安装必要软件包

在两台Ubuntu服务器上执行以下命令安装rsync和sshpass:

sudo apt update && sudo apt install -y rsync sshpass

注意:虽然可以直接在命令行中使用密码,但更安全的做法是配置SSH密钥认证。本文为简化流程使用sshpass,生产环境建议改用密钥对。

2.2 测试rsync基本功能

先验证rsync能否正常工作,从源服务器同步到目标服务器:

rsync -avz --progress /path/to/source/ user@destination:/path/to/target/

常用参数说明:

  • -a:归档模式(保留权限等属性)
  • -v:详细输出
  • -z:传输时压缩
  • --progress:显示传输进度

3. 实现免密自动同步

3.1 使用sshpass绕过密码提示

虽然SSH密钥更安全,但在某些受限环境中,可以使用sshpass临时解决密码问题:

sshpass -p 'your_password' rsync -avz /source/ user@host:/target/

安全警告:命令行中直接暴露密码存在风险,仅限测试环境使用。实际部署时应:

  1. 设置专用低权限账号
  2. 使用SSH密钥认证
  3. 或通过环境变量传递密码

3.2 路径结尾斜杠的玄机

rsync对路径结尾的斜杠处理非常关键:

源路径格式同步效果
/path/to/folder同步整个folder目录到目标位置
/path/to/folder/仅同步folder目录下的内容到目标位置

错误示例:

# 错误:会将整个source_dir作为子目录复制到target下 rsync -av /source_dir user@host:/target # 正确:只同步source_dir下的内容到target rsync -av /source_dir/ user@host:/target/

4. 配置crontab定时任务

4.1 crontab基础语法

编辑当前用户的crontab:

crontab -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/ user@host:/dst/
  • 每天凌晨3点同步:

    0 3 * * * rsync -avz -e "ssh -i /path/to/key" /src/ user@host:/dst/
  • 每周一早上6点,并删除目标端多余文件:

    0 6 * * 1 rsync -avz --delete /src/ user@host:/dst/

4.3 日志记录与监控

为便于排查问题,建议将同步结果重定向到日志文件:

*/10 * * * * rsync -avz /src/ user@host:/dst/ >> /var/log/rsync.log 2>&1

关键监控点:

  • 最后一次成功同步时间
  • 同步文件数量变化
  • 网络传输速率波动

5. 高级技巧与故障排查

5.1 带宽限制与网络优化

在大文件同步时,可使用--bwlimit防止占用全部带宽:

rsync -avz --bwlimit=1000 /src/ user@host:/dst/ # 限制为1000KB/s

其他优化参数:

  • --compress-level=3:调整压缩级别
  • --partial:保留部分传输的文件
  • --timeout=30:设置超时时间(秒)

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本身是单向同步,但可以通过两个反向任务实现准双向同步:

  1. 服务器A同步到服务器B:

    */5 * * * * rsync -avz /data/ user@B:/backup/A_to_B/
  2. 服务器B同步到服务器A:

    */7 * * * * rsync -avz /data/ user@A:/backup/B_to_A/

注意:真正的双向同步推荐使用专门工具如Unison,以避免版本冲突。

6. 安全加固方案

6.1 改用SSH密钥认证

生成密钥对:

ssh-keygen -t ed25519

复制公钥到目标服务器:

ssh-copy-id user@remote_host

测试无密码登录:

ssh user@remote_host

6.2 限制rsync命令权限

通过--rsh限制可执行的远程命令:

rsync -avz -e 'ssh -i /path/to/key -o RemoteCommand="/usr/bin/rsync --server --sender -vlogDtprze.iLsf . /target/"' /src/ user@host:

6.3 敏感信息处理

对于包含密码或密钥的配置文件:

  • 使用--exclude跳过敏感文件
  • 同步前用ansible-vault等工具加密
  • 设置严格的文件权限
rsync -avz --exclude='*.key' --exclude='*.env' /src/ user@host:/dst/

在实际项目部署中,我们团队发现将这套同步机制与CI/CD流程结合,能显著提升部署效率。特别是处理微服务架构下的多环境配置同步时,自动化方案比手动操作减少了约70%的配置错误。一个典型的应用场景是:开发环境的配置变更后,自动同步到测试环境,再通过审批流程同步到生产环境。这种自动化流水线不仅可靠,还能完整记录每次变更的来源和时间。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/28 4:03:43

STM32自动循迹小车设计与实现

1. 项目概述2016年TI杯电子设计竞赛中,我们团队设计了一款基于STM32的自动循迹小车系统。这个项目获得了省级一等奖,也是我职业生涯的重要转折点。作为控制类题目,系统需要实现沿预定轨迹自动行驶,并能检测轨迹旁的金属硬币。核心…

作者头像 李华
网站建设 2026/5/23 1:54:47

Intel 为什么没能借助GPU成为 AI 时代的第二个 NVIDIA?

很多人对 Intel 的印象,仍然停留在"CPU 公司"。所以当 AI 时代全面到来,NVIDIA 凭借 GPU 成为新的算力霸主时,一个很自然的问题就出现了:Intel 为什么没做成 GPU?表面上看,这像是一个产品问题。但…

作者头像 李华
网站建设 2026/5/23 1:54:49

javaweb山区城市环境污染监督管理系统

目录同行可拿货,招校园代理 ,本人源头供货商功能模块划分技术实现要点山区特色功能项目技术支持源码获取详细视频演示 :文章底部获取博主联系方式!同行可合作同行可拿货,招校园代理 ,本人源头供货商 功能模块划分 用户管理模块 支持管理员、环保部门、企…

作者头像 李华
网站建设 2026/5/23 1:54:48

提升开发效率:用快马平台和OpenClaw实现机械爪智能抓取流程

最近在做一个机械爪自动化抓取的项目,发现用OpenClaw结合InsCode(快马)平台可以大幅提升开发效率。整个过程从需求分析到实现只用了不到半天时间,这里分享一下具体思路和实现过程。 需求分析 项目需要实现机械爪的智能抓取流程,主要包含五个核…

作者头像 李华