首页
Linux常用
docker常用
关于
Search
1
docker安装MDCX
212 阅读
2
麒麟KylinV10离线下载安装包及安装
110 阅读
3
iStoreOS上使用WireGuard
78 阅读
4
UNRAID增加和缩小虚拟机虚拟磁盘大小
50 阅读
5
unraid添加iSCSI 发起程序
39 阅读
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
登录
Search
标签搜索
nginx
unraid
PVE
数据库
dockerfile
同步
wow服务器
装机硬件
宏
v2ray
直通
电视盒子
相册
黑裙7.0.1
远程穿透
定时
ssh
emby
symlink
软链接
奥黛丽·逐爱者
累计撰写
113
篇文章
累计收到
10
条评论
首页
栏目
默认分类
docker
容器安装
Linux
数据库
群辉
软路由
unRAID
PVE
Nginx
wow
杂项
图床
飞牛
转载微信公众号文章
Docker学习
Linux学习
页面
Linux常用
docker常用
关于
搜索到
2
篇与
同步
的结果
2025-08-05
项目实践:使用Rsync和Crontab实现每天凌晨2点将远程服务器文件自动同步到本地服务器进行异地备份
本文将介绍如何通过rsync命令结合crontab定时任务,实现从远程SMB共享目录到本地目录的自动化文件同步。这种方案特别适合需要定期备份远程文件或保持两地文件一致性的场景。1.环境说明远程服务器:SMB共享目录位于/data/myshare/本地服务器:备份目录为/data/mybackup同步时间:每天凌晨2点SSH端口:假设远程服务器使用非标准SSH端口(如2222)2.实现步骤2.1创建同步脚本首先,我们需要创建一个bash脚本来自动执行同步任务。在本地服务器上创建/usr/local/bin/sync_backup.sh文件:#!/bin/bash# 远程服务器信息REMOTE_USER="username" # 替换为实际用户名REMOTE_HOST="remote.example.com" # 替换为实际主机名或IPSSH_PORT="2222" # 替换为实际SSH端口REMOTE_DIR="/data/myshare/" # 远程SMB共享目录LOCAL_DIR="/data/mybackup" # 本地备份目录# Rsync命令rsync -avz -e "ssh -p $SSH_PORT" --delete --progress $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR $LOCAL_DIR# 记录同步日志echo "[$(date +'%Y-%m-%d %H:%M:%S')] Rsync completed from $REMOTE_HOST:$REMOTE_DIR to $LOCAL_DIR" >> /var/log/rsync_backup.log脚本说明:-avz:归档模式(a),显示详细输出(v),使用压缩传输(z)-e "ssh -p $SSH_PORT":指定非标准SSH端口--delete:删除本地目录中不存在于远程目录的文件--progress:显示传输进度最后一行将同步操作记录到日志文件中2.2设置脚本权限运行以下命令使脚本可执行:sudo chmod +x /usr/local/bin/sync_backup.sh2.3配置SSH免密登录为了避免每次同步都需要输入密码,可以设置SSH密钥认证:ssh-keygen -t rsassh-copy-id -i ~/.ssh/id_rsa.pub -p 2222 username@remote.example.com2.4创建crontab定时任务使用crontab -e命令编辑当前用户的crontab:0 2 * * * /usr/local/bin/sync_backup.sh这表示每天凌晨2点执行同步脚本。2.5验证配置可以手动运行脚本测试是否正常工作:/usr/local/bin/sync_backup.sh检查/var/log/rsync_backup.log查看同步结果。3.高级配置选项带宽限制:如果同步过程占用过多带宽,可以添加--bwlimit=KBPS参数限制传输速率。排除特定文件:使用--exclude参数排除不需要同步的文件或目录。邮件通知:可以在脚本中添加邮件发送功能,通知同步结果。错误处理:增强脚本的错误处理能力。修正后的脚本如下:#!/bin/bash# 远程服务器信息REMOTE_USER="username" # 替换为实际用户名REMOTE_HOST="remote.example.com" # 替换为实际主机名或IPSSH_PORT="2222" # 替换为实际SSH端口REMOTE_DIR="/data/myshare/" # 远程SMB共享目录LOCAL_DIR="/data/mybackup" # 本地备份目录# 执行rsync并捕获退出状态rsync -avz -e "ssh -p $SSH_PORT" --delete --progress $REMOTE_USER@$REMOTE_HOST:$REMOTE_DIR $LOCAL_DIR# 检查rsync执行结果if [ $? -eq 0 ]; then echo "[$(date +'%Y-%m-%d %H:%M:%S')] Rsync completed successfully" >> /var/log/rsync_backup.logelse echo "[$(date +'%Y-%m-%d %H:%M:%S')] Rsync failed with error code $?" >> /var/log/rsync_backup.log # 可以在这里添加发送错误通知的代码fi4.总结通过结合rsync和crontab,我们建立了一个可靠、自动化的文件同步系统。这种方案具有以下优点:自动化运行:无需人工干预,定时自动执行高效同步:rsync只传输变化的文件部分,节省带宽和时间灵活性:支持非标准SSH端口和各种同步选项可追溯性:日志记录每次同步操作此方案适用于各种文件备份和同步场景,特别是需要定期将远程文件同步到本地的备份需求。
2025年08月05日
10 阅读
0 评论
0 点赞
2025-07-24
Rsync(远程同步):Linux 最常用的文件复制与同步工具
Rsync(远程同步)是Linux/Unix系统中用于远程和本地复制及同步文件和目录的最常用命令。借助 rsync 命令,可以跨目录、磁盘和网络远程和本地复制及同步数据,执行数据备份,并在两台 Linux 机器之间进行镜像同步。本文将详细讲解 rsync 命令的部分基本和高级用法,帮助您在基于 Linux 的机器上远程和本地传输文件。归档模式 | 增量传输 | SSH 加密 | 带宽控制📢 无需 root 权限 | 本地/远程通用 | 保留文件属性# 基础格式(归档+压缩+进度显示)rsync -avzP 源路径 目标路径常用选项:选项作用-v显示详细传输过程-r递归复制目录(不保留元数据)-a归档模式(保留所有文件属性)-z传输时压缩数据-h人性化显示数字大小-P显示实时进度条🚀 核心优势对比表特性Rsync传统 SCP传输效率✅ 增量同步(仅传差异部分)❌ 全文件传输带宽控制✅ --bwlimit 限速❌ 不支持属性保留✅ 权限/时间戳/所有者❌ 部分丢失断点续传✅ -P 选项自动续传❌ 重新传输安全传输✅ SSH 隧道加密✅ SSH 加密📦 基础操作篇1. 本地文件同步要本地复制或同步文件,可以使用以下命令,该命令将从本地机器的一个位置同步单个文件到另一个位置。rsync -zvh Python-3.13.4.tgz /tmp/backups/# 将 Python-3.13.4.tgz 同步到 /tmp/backups2. 本地目录同步(保留属性)以下命令将从一台机器上的一个目录将所有文件传输或同步到同一台机器上的另一个目录。rsync -avzh music/ oneh@192.168.2.100:/home/oneh/# 递归同步整个目录(保留属性)3. 远程 → 本地目录同步rsync -azvh oneh@192.168.2.100:/home/oneh/ /tmp/music🌐 远程操作篇4. 本地 → 远程目录(SSH 加密)使用 rsync,可以借助 SSH进行数据传输。通过 SSH 协议,可以确保数据在加密的连接中传输,从而防止任何人在数据通过互联网传输过程中窃取数据。要通过 SSH 使用 rsync,您可以使用 -e 选项指定远程 shell 命令,通常为 ssh,如下所示。rsync -avzhe ssh music/ oneh@192.168.2.100:/home/oneh/backup_music5. 远程文件 → 本地(带进度条)远程到本地,使用 --progress 显示传输进度条.rsync -avzhe ssh --progress oneh@192.168.2.100:/home/oneh/backup_music /home/oneh/backup_music6. SSH 密钥免密同步(安全推荐)# 先配置密钥:ssh-keygen + ssh-copy-idrsync -avzhe ssh /source user@IP:/dest ⚙️ 高级技巧篇7. 智能文件过滤# 包含 .c 排除 .h:rsync -avz --include='*.c' --exclude='*.h' /home/oneh/Python-3.13.4/Python/ oneh@192.168.2.100:/home/oneh/Python8. 目标端清理源端已删除文件如果源位置不存在某个文件或目录,但目标位置已经存在该文件/目录,希望在同步过程中删除目标位置的该现有文件/目录。rsync -avz --delete /home/oneh/music/ oneh@192.168.2.100:/home/oneh/backup_music/9. 传输后自动删除源文件假设你有一个主网页服务器和一个数据备份服务器,你创建了每日备份并将其与备份服务器同步,但现在你不想在网页服务器上保留该备份的本地副本。rsync --remove-source-files -avzh data.log oneh@192.168.2.100:/home/oneh/backup/10. 空运行测试(安全防护)如果您是 rsync 的新手,且不确定自己的命令会产生什么具体效果,那么 rsync 可能会对目标文件夹中的内容造成混乱,而要撤销这些操作可能会非常繁琐。使用此选项不会对文件进行任何修改,并显示命令的输出结果。如果输出结果与您期望的完全一致,则可以从命令中移除‘--dry-run’选项,并在终端中运行。rsync --dry-run -avz hello.py oneh@192.168.2.100:/home/oneh/🛡️ 企业级场景方案11. 带宽限速(避免网络阻塞)使用--bwlimit选项从一台机器向另一台机器传输数据时,可以设置带宽限制。此选项可帮助我们限制I/O带宽。rsync --bwlimit=5000 -avzh Python-3.13.4.tgz oneh@192.168.2.100:/home/oneh/ 12. 故障恢复传输rsync -avzP --partial /中断文件 目标路径📊 参数速查表参数作用示例-a归档模式(全属性保留)rsync -a src/ dest/-z传输时压缩rsync -z data.log remote:--max-size限制文件大小--max-size='100M'-W禁用增量传输(全文件)rsync -W image.iso dest/--stats显示传输统计rsync -a --stats src/ dest/💎 结语与进阶建议灾难防护:重要操作前必加 --dry-run性能调优:大文件传输用 -W + --bwlimit 组合自动化:搭配 cron 实现定时备份深度学习:man rsync 查看 50+ 高级参数✨ 下一步实践:# 生成测试环境mkdir -p test/{src,dest} && touch test/src/file{1..100}.txt# 体验实时同步:watch -n 1 "rsync -avz test/src/ test/dest/ | grep 'sent'"推荐阅读:👉 1.在 Linux 系统上绝对不能执行的 10 条命令-很危险的👉 2.基本的Linux命令,【tail】 命令常用的实用示例,告别海量日志,精准抓取关键信息👉 3.章节2:基本的Linux命令,【echo】 命令常用的实用示例,Linux终端输出的瑞士军刀!
2025年07月24日
24 阅读
0 评论
0 点赞