close_write
ionotifywait 이벤트가 파일이 완전히 기록되도록 보장하는지 명확히 해주세요 .
파일 전송 프로그램이 X 파일을 원격 서버 Z로 보내고 파일 전송이 완료되면 Z의 X를 모니터링하여 X를 이동해야 하는 상황입니다. 언제 전송이 이루어질지 알 수 없으므로 모니터링이 필요합니다.
bash 스크립트 inotifywait는 계속하기 전에 파일이 완전히 기록될 때까지 기다립니다.close_write
파일이 완전히 작성되었음을 나타냅니다 .
이 두 파일이 있는지 확인하는 가장 좋은 방법은 무엇입니까?완전히 작성됨
pacholik close_write가 지적했듯이 이벤트 옵션만으로 충분합니다.
inotifywait -m -e close_write $1 | while read line
그러나 매뉴얼 페이지에는 다음과 같이 나와 있습니다.반드시 파일이 기록되었다는 의미는 아닙니다..
inotifywatch(1) - Linux 매뉴얼 페이지
쓰기를 위해 닫기
감시된 파일 또는 감시된 디렉터리의 파일은 쓰기 가능 모드로 열린 후 닫힙니다. 이것은 실제로반드시 파일이 작성되었다는 의미는 아닙니다..
답변1
close_write
마지막 단락 에서는 이벤트가 파일 설명자가 닫혔으며 쓰기 가능 모드로 열렸음을 나타낼 뿐이며 열기 이벤트와 닫기 이벤트 사이에 발생한 어떤 것도 설명하지 않는다는 사실을 강조합니다 . 그래서 프로세스가 수행 중입니다.
fd = open("/path/to/foo", O_RDWR);
close(fd);
이벤트 close_write
가 트리거됩니다.
기본적으로 파일이 수정된 시기와 수정이 완료된 시기를 알고 싶다면 modify
및 close_write
/또는 close
이벤트를 모니터링해야 합니다.
귀하의 시나리오에서는 close_write
이것으로 충분합니다. 일단 파일이 닫히면 후속 읽기로 인해 모든 데이터가 파일에 기록되고 파일을 수정한 원래 프로세스는 더 이상 그렇게 할 수 없습니다(파일을 다시 열지 않고). 이것아니요즉, 모든 데이터가 디스크에 있고 여전히 캐시에 있을 수 있지만 이를 읽는 프로세스에는 모든 데이터가 표시됩니다.