Rsyncデーモン最大接続トラフィック輻輳

Rsyncデーモン最大接続トラフィック輻輳

私はすべての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 = 1file.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ラッパースクリプトの1つの例です。

#!/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接続がまだ確立されていない場合、または接続が失われた場合にこれを一度だけ実行することでした。

メモ:.lockrsync-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ループが原因で切断されたときに再接続され、古いロックファイルが将来の間隔でバックアッププロセスを妨げる危険はありません...(つまり、トラブルシューティングされました)。

おすすめ記事