我使用的是 Ubuntu 20.04,我使用下面的 bash 脚本/rsync 通过 ssh 连接到远程服务器上的 rsync-daemon。
缺点是通过 ssh 使用 rsync 也会产生服务器负载,因此为了克服服务器负载的问题,我添加了 ionice 值,如下所示。负载不再是问题。
我的问题是 ionice 值似乎会导致 ssh 连接不稳定,进而导致我的登录通知程序脚本发送一百万封电子邮件,因为 ssh 不断断开并重新连接。
有人可能会看到更好的负载问题解决方案和/或知道如何保持 ssh 连接稳定吗?
#!/bin/bash
while [ 1 ]
do
rsync -avzxP --delete --checksum --append-verify --timeout=180 --bwlimit=48 --rsync-path="sudo ionice -c 3 rsync" --log-file=/var/log/rsync.log --exclude 'var-logs' --password-file=/etc/rsyncd.passwd -e "ssh -l backups" XXX.XX.XXX.XX::backup-data /media/username/WebMade/Server-Backups/Prod/today/
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "Rsync failure. Backing off and retrying..."
sleep 10
fi
done
#EOF
答案1
使用此 rsync 命令,您可以将文件从远程计算机拉到本地计算机。
该-z
选项要求远程计算机的 rsync 守护进程将通过网络传输到本地 rsync 的文件数据压缩(并且本地 rsync 在将数据写入文件之前解压缩数据)。ionice
该选项中指定的值--rsync-path
会降低远程计算机上 rsync 进程的磁盘 I/O 优先级。
从计算机上的磁盘读取文件的进程通常不会给计算机增加大量负载,除非磁盘速度很慢,因此ionice
不太可能有助于减少远程计算机上的负载。对于数据压缩,执行压缩的进程通常会给计算机增加大量的 cpu 负载,而解压缩数据的进程只会增加很少的 cpu 负载。--bwlimit
当文件传输消耗了两台计算机之间网络的所有带宽时,该选项非常有用,但堵塞的网络通常不会在任何一台计算机上显示为额外负载。
-z
根据我的经验,当计算机之间的网络连接在 LAN 中高速工作或通过最现代的“高速”互联网链接到家庭时,要求 rsync 压缩通过网络传输的数据(选项)并不是很有用。您几乎没有或根本没有减少传输文件所需的时间,但代价是发送端的 CPU 消耗更高。
基于此,我的建议是删除--bwlimit
and--rsync-path
和-z
选项。最后一个很可能会导致您一直试图解决的服务器负载。