rsyncスクリプトはCentOS 7では動作しますが、同じスクリプトはRHEL 7では動作しません。

rsyncスクリプトはCentOS 7では動作しますが、同じスクリプトはRHEL 7では動作しません。

CentOS7には3つのノードがあり、RHEL7には1つのノードを持つ仮想マシンクラスタがあります。 crontabにはrsyncが有効なディレクトリがあり、/mnt/<server_IP>/portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/api/ 設定は次のとおりです。

$ incrontab -l
/mnt/<server_IP>/portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/api/ IN_MODIFY,IN_ATTRIB,IN_CREATE,IN_DELETE /mnt/rsync/rsync-for-carbon-depsync.sh

デバッグが有効なrsyncスクリプト

#!/bin/sh -ex
#source folder
portal=/mnt/<server_IP>/portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/
#Destination folder
gateway=/mnt/<server_IP>/gateway/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default
LOG=/log/rsync/carbon-rsync-logs/"log-local-$(date +%Y%m%d_%H%M%S).log"

echo "entered the script" >> $LOG

#keep a lock to stop parallel runs
(
echo "entered the flock" >> $LOG
flock -e 10
echo "Obtained the lock" >> $LOG
echo " ========== $(date -Iseconds) Lock acquired by local thread <server_IP>< =========== " >> $LOG
rsync --delete -arv $portal   $gateway  >>  $LOG
) 10> /var/rsync/.rsync.lock
echo " ========== $(date -Iseconds) Release Lock acquired by local thread <server_IP> =========== " >> $LOG

以下はログファイルです

entered the script
entered the script

デフォルトでは、すべての変更portalはに反映されなければなりませんgatewayportalディレクトリに一時ファイルを作成しました。ただし、gatewayディレクトリには反映されません。これは新しいRHEL 7 VMでのみ機能します。以前のCentOS 7 VMは同じスクリプトでうまく機能します。

答え1

/tmp/errors2行目に新しいコマンドを追加して、ログファイルでエラー報告を有効にすることをお勧めします。少し拡張して、予想される出力と予期しないエラーを単一のファイルにキャプチャするために、次のように修正しました/tmp/output

#!/bin/sh -ex
exec >/tmp/output 2>&1

#source folder
portal=/mnt/<server_IP>/portal/wso2telcohub-3.0.2/repository/deployment/server/synapse-configs/default/
...

実稼働環境では、人々はより明確に定義されたログファイルに記録したり、システムロガーを使用したりします(詳細man logger)。

シェル-eフラグは、成功しなかった状態(ゼロ以外の終了コード)を返すコマンドを実行した直後に終了するようにします。エラーログは、シェルがシャットダウンしたときにエラーによって生成された出力をキャプチャします。この-xフラグはトレースを有効にします。ログファイルも追跡できます。

コメント君が決めて、」/varRHEL 7にはrsyncディレクトリはありません。」。

したがって、スクリプトがRHEL 7で実行されていないのは、スクリプトに必要なディレクトリが作成されていないためです。スクリプトは書き込みを試みます/var/rsync/.rsync.lockが、親ディレクトリが存在しないため書き込みできません。

解決策は、ディレクトリを作成し、スクリプトを実行するUIDがディレクトリに書き込むことができることを確認することです。より良い方法は、ディレクトリがまだ存在しない場合はスクリプトを修正してディレクトリを作成するか、取得して実際の人に提供できる方法でこのエラーを報告することです。

関連情報