2012-09-10 4 views
2

admin 사용자가 업로드 한 사진을 웹 사이트에 복사하여 두 개의 다른 백엔드 서버에 복사해야하는 스크립트가 있습니다. 이렇게하려면 다음을 수행하십시오.inotifywait가 아파치에 의한 파일 생성에 반응하지 않습니다.

while true; do                                                          
    inotifywait -e create "$TRANSFER_FILES" && \                                                
      sleep 20 && \                                                
      copy_files "$SSH_SERVER_1" "$REMOTE_DIR_1" && \                                                
      copy_files "$SSH_SERVER_2" "$REMOTE_DIR_2" 
    sleep 2 
done 

수면 20은 업로드 된 이미지의 크기를 조정할 시간을 제공합니다.

문제 :

내가 터치 또는 고양이 또는 무엇 이건, 루트 또는 아파치 사용자로 중, (로컬 파일 시스템에있는)이 $ TRANSFER_FILES 디렉토리에 파일을 작성하는 경우, inotifywait를가 CREATE evenc를 수신 copy_files 함수 (rsync 래핑)가 호출됩니다. 그러나 아파치 프로세스가 파일을 만들면 아무 일도 일어나지 않습니다.

+0

은 NFS 파일 시스템 또는 로컬에서 $ TRANSFER_FILES입니까? –

+0

로컬. 나는 그 질문을 갱신 할 것이다. –

+4

아파치는 실제로'$ TRANSFER_FILES'에 파일을 생성합니까? 파일이 elswhere로 생성 된 다음 디렉토리로 이동하면 $ TRANSFER_FILES에 대한'create' 이벤트가 없습니다. Apache 프로세스를 통해 파일을 생성 할 때'inotifywait -m "$ TRANSFER_FILES"'를 실행하여 디렉토리에서 이벤트를 모니터링 해보십시오. –

답변

1

귀하의 질문에 대한 직접 대답은 아니지만 lsyncd을 고려해야합니다. 그것은 당신이하려고하는 것을 정확하게 수행합니다 : 그것은 inotify를 기다린 다음 동기화를 실행합니다 (기본적으로 rsync에 의해). 그것은 잘 테스트 된 독립형 데몬입니다.