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에 반영되어야 합니다 gateway. portal디렉터리에 임시 파일을 만들었습니다. 하지만 gateway디렉토리 에는 반영되지 않습니다 . 이는 새로운 RHEL 7 VM에서만 작동합니다. 이전 CentOS 7 VM은 동일한 스크립트로 잘 작동합니다.

답변1

/tmp/errors두 번째 줄에 새 명령을 추가하여 로그 파일에 오류 보고를 활성화하는 것이 좋습니다. 조금 확장하여 예상되는 출력과 예상치 못한 오류를 단일 파일에 캡처하기 위해 다음과 같이 수정했습니다 /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플래그는 성공하지 못한 상태(0이 아닌 종료 코드)를 반환하는 명령을 실행한 후 즉시 종료되도록 합니다. 오류 로그는 셸이 종료될 때 오류로 인해 생성된 출력을 캡처합니다. 이 -x플래그는 추적을 활성화합니다. 로그 파일도 추적할 수 있습니다.

안에논평네가 결정해,"/varRHEL 7에는 rsync 디렉터리가 없습니다.".

따라서 스크립트가 RHEL 7에서 실행되지 않는 이유는 스크립트에 필요한 디렉터리를 생성하지 않았기 때문입니다. 스크립트가 쓰기를 시도 /var/rsync/.rsync.lock하지만 상위 디렉터리가 존재하지 않기 때문에 쓸 수 없습니다.

해결책은 디렉토리를 생성하고 스크립트를 실행하는 UID가 디렉토리에 쓸 수 있는지 확인하는 것입니다. 더 나은 방법은 디렉토리가 아직 존재하지 않는 경우 스크립트를 수정하여 디렉토리를 생성하거나, 포착하여 실제 사람에게 제공할 수 있는 방식으로 이 오류를 보고하는 것입니다.

관련 정보