나는 모든 rync 요구 사항에 대해 rsync 데몬을 사용하는 것을 선호합니다. 왜냐하면 깔끔한 중앙 집중식 관리를 제공하고 시스템 리소스를 절약하기 때문입니다. 따라서 광산에는 /etc/rsyncd.conf
여러 모듈 항목이 포함되어 있습니다.
실제 rsync 명령에 대한 내 래퍼 스크립트는 while
모두 연결이 끊어진 경우 rsync를 즉시/반복적으로 다시 연결하는 루프입니다.
질문:max connections = 1
각 모듈의 변수 항목 읽기세계적인대신에개별적으로모듈당. 따라서 @ERROR: max connections (1) reached -- try again later
(rsync 데몬이 먼저 연결되면 사용 가능한 단일 데몬을 얻게 됩니다.)잘못된 글로벌 max connection = 1
, 다른 모든 연결이 실패하게 됩니다..짜증납니다).
그렇지 않으면 max connections = 1
루프 while
가 무한 스레드를 시작하고 불필요한 리소스를 소비할 수 있으므로 모듈당 연결 수가 제한됩니다. 동시에 각 문서에는 max connections = 1
file.lock이 함께 제공됩니다.per module
이 내 꺼야 /etc/rsyncd.conf
:
[home]
path = /home/username
list = yes
use chroot = false
strict modes = false
uid = root
gid = root
read only = yes
# Data source information
max connections = 1
lock file = /var/run/rsyncd-home.lock
[prod-bkup]
path = /media/username/external/Server-Backups/Prod/today
list = yes
use chroot = false
strict modes = false
uid = root
gid = root
# Don't allow to modify the source files
read only = yes
max connections = 1
lock file = /var/run/rsyncd-prod-bkup.lock
[test-bkup]
path = /media/username/external/Server-Backups/Test/today
list = yes
use chroot = false
strict modes = false
uid = root
gid = root
# Don't allow to modify the source files
read only = yes
max connections = 1
lock file = /var/run/rsyncd-test-bkup.lock
[VminRoot2]
path = /root/VDI-Files
list = yes
use chroot = false
strict modes = false
uid = root
gid = root
# Don't allow to modify the source files
read only = yes
max connections = 1
lock file = /var/run/rsyncd-VminRoot2.lock
다음은 rsync-daemon 래퍼 스크립트 중 하나의 예입니다.
#!/bin/sh
#
#
while [ 1 ]
do
cputool --load-limit 7.5 -- nice -n -15 rsync -avxP --no-i-r --rsync-path="rsync" --log-file=/var/log/rsync-home.log --exclude 'snap' --exclude 'lost+found' --exclude=".*" --exclude=".*/" 127.0.0.1::home /media/username/external/home-files-only && sync && echo 3 > /proc/sys/vm/drop_caches
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "Rsync failure. Backing off and retrying..."
sleep 10
fi
done
#end of shell script
질문
이 오류를 어떻게 제거할 수 있나요 ERROR: max connections (1) reached -- try again later
?
답변1
내가 내린 해결책은 while loop
연결이 아직 설정되지 않았거나 연결이 끊어진 경우 이 작업을 한 번만 수행하는 것이었습니다.
노트:.lock
rsync-daemon 구성에 대한 문서에 따르면 해결 방법이 아닌 내 솔루션은 불필요해야 하지만 각 모듈에 대해 개별적으로 이름이 지정된 파일이 있음에도 불구하고 A 방식으로 연결하는 첫 번째 스크립트는 while loop
방지하는 것이 아닌 것 같습니다. 다른 .lock
파일은 해당 스크립트에서 사용되지 않습니다. (rsync 오류?)
해결 방법 1(빠르고 지저분함):
flock -n <lock file> <script>
또는 제 경우에는 다음 명령을 사용하여 cron 작업을 실행합니다.
flock -n /var/run/rsyncd-home.lock /path/to/my_script.sh
경고하다- 이로 인해 스크립트가 오래된 잠금 파일에 취약해져서 다음 간격에서 실행되지 않을 수 있습니다.
해결 방법 2:
그래서 나는방탄접근 방식(그래서...필요하다면 사람들에게 내 이해를 바로잡도록 권유합니다)...
먼저 내가 그랬어apt install procmail
거기에서 /usr/local/bin/backupscript.sh
다음과 같이 편집했습니다.
#!/bin/bash
#
LOCK=/var/run/rsyncd-home.lock
remove_lock()
{
rm -f "$LOCK"
}
another_instance()
{
echo "There is another instance running, exiting"
exit 1
}
lockfile -r 0 -l 3600 "$LOCK" || another_instance
trap remove_lock EXIT
#new using rsyncd & perpetual restart
while [ 1 ]
do
cputool --load-limit 7.5 -- nice -n -15 rsync -avxP --no-i-r --rsync-path="rsync" --log-file=/var/log/rsync-home.log --exclude 'lost+found' --exclude=".*" --exclude=".*/" 127.0.0.1::home /media/username/external/home-files-only && sync && echo 3 > /proc/sys/vm/drop_caches
if [ "$?" = "0" ] ; then
echo "rsync completed normally"
exit
else
echo "Rsync failure. Backing off and retrying..."
sleep 10
fi
done
#end of shell script
프레스토 악장:
스크립트는 rsync 데몬에 한 번만 연결되며 while 루프로 인해 연결이 끊어지면 다시 연결되며 오래된 잠금 파일이 향후 간격으로 백업 프로세스를 방해할 위험이 없습니다...(즉, 문제 해결되었습니다).