모든 것이 로컬에 저장된 후 전송/mv를 커밋하는 Rsync

모든 것이 로컬에 저장된 후 전송/mv를 커밋하는 Rsync

폴더를 제거 서버 폴더로 재동기화하는 방법이 있지만 전체 전송이 완료된 후에만 모든 것을 이동할 수 있습니까?

나는 파일을 차례로 이동하는 것을 원하지 않습니다. 왜냐하면 실행 중인 웹 서버에 문제가 발생할 수 있기 때문입니다.

모든 것이 서버에 전송된 후에 전체 폴더를 이동하고 싶습니다(약 1초 소요).

답변1

당신은 찾고 있습니다--지연 업데이트옵션. 에서 man rsync:

   --delay-updates
          This  option puts the temporary file from each updated file into
          a holding directory until the end of the transfer, at which time
          all  the files are renamed into place in rapid succession.  This
          attempts to make the updating of the files a little more atomic.
          [...]
          See  also the "atomic-rsync" perl script in the "support" subdir
          for an update algorithm  that  is  even  more  atomic  (it  uses
          --link-dest and a parallel hierarchy of files).

답변2

가장 안전한 방법은 rsync가 파일을 웹 서버의 docroot 외부의 대체 디렉터리에 배치하도록 하는 것입니다. 그런 다음 docroot가 새 폴더를 가리키도록 서버 구성을 변경하고 웹 서버에 신호를 보내"우아한"해당 구성을 다시 로드합니다. Apache를 사용하면 요청이 잘못 처리되거나 삭제되지 않도록 보장됩니다.

USR1 또는 우아한 신호는 상위 프로세스가 하위 프로세스에게 현재 요청 후에 종료하도록(또는 아무것도 제공하지 않는 경우 즉시 종료하도록) 조언하도록 합니다. 상위는 구성 파일을 다시 읽고 로그 파일을 다시 엽니다. 각 하위 요소가 종료되면 상위 요소는 이를 차세대 구성의 하위 항목으로 대체하고 즉시 새로운 요청을 처리하기 시작합니다.

즉, 웹 서버 관리를 위한 rsync 옵션을 찾는 대신 쉘 스크립트와 ssh를 사용하여 이를 자동화하겠습니다.

관련 정보