rsync
파일을 프로덕션에 푸시하는 명령을 실행할 때 때때로(항상 그런 것은 아니며 매우 드물지만) 동기화가 완료된 후 프로덕션에서 오류가 발생합니다.
명령 rsync
은 다음과 같습니다.
rsync -avzO --exclude=*.git --exclude=*.log /var/www/html/ver_1/api [email protected]:/var/www/html/ver_1
나는 다음 사항을 확인했습니다.
- 프로덕션 및 테스트 환경 설정(PHP 및 Apache)은 서로 미러링됩니다.
- 질문가지다
rsync
파일을 수동으로 복사할 때(사용하여) 명령과 함께 작동합니다.WinSCP) 문제 없습니다. 따라서 코드 버그가 아닙니다. - 하나의 CentOS 시스템에서 다른 시스템으로 동기화 중입니다(차이가 있는 경우).
질문
- 이 문제의 원인은 무엇입니까?
- 왜 이런 일이 가끔씩만 발생합니까(25번 중 2/3번)
- 이 문제를 해결하거나 발생을 최소화하려면 어떻게 해야 합니까?
편집하다
PHP Fatal error: require_once(): Cannot redeclare class api\lib\classapitools\apitools in /var/www/html/ver_1/api/index.php on line 42
- index.php 파일을 테스트에서 프로덕션으로 복사했지만 수정되지 않았습니다.
- rsync 명령을 다시 실행해도 문제가 해결되지 않았습니다.
- 그런 다음 모든 파일을 수동으로 복사했는데 작동했습니다. 전체 앱을 디버깅했지만 오류에 대한 자세한 정보를 반환하지 않았습니다. (일반적인 의미에서 오류가 발생한 이유를 알고 있지만
rsync
수동으로 동기화할 때까지 전체 앱을 FUBAR하는 것처럼 보였습니다.)
답변1
-a
rsync와 함께 사용하는 플래그 에 문제가 있을 가능성이 높습니다 . 이는 -t
파일 수정 시간을 보존한다는 점을 포함하여 다른 옵션 세트와 동일합니다 .
대상 컴퓨터에서 애플리케이션을 다시 시작하지 않기 때문에 이제 애플리케이션 및 이러한 파일이 변경되었는지 여부에 따라 해당 컴퓨터를 사용하여 이러한 파일의 일부 또는 전체를 다시 읽습니다.
이전 rsync에서 전송된 파일(현재 파일은 아님) -rlpgoD
대신 사용하려는 파일의 "잘못된" 타임스탬프는 타임스탬프가 다르더라도 문제를 일으키지 않아야 합니다. 내용은 동일합니다.-a
rsync
이 옵션을 계속 사용하면 --in-place
더 많은 문제가 발생할 수 있습니다.