iowaitnotify close_wait는 파일이 완전히 기록되었는지 확인합니까?

iowaitnotify close_wait는 파일이 완전히 기록되었는지 확인합니까?

close_writeionotifywait 이벤트가 파일이 완전히 기록되도록 보장하는지 명확히 해주세요 .

파일 전송 프로그램이 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가 트리거됩니다.

기본적으로 파일이 수정된 시기와 수정이 완료된 시기를 알고 싶다면 modifyclose_write/또는 close이벤트를 모니터링해야 합니다.

귀하의 시나리오에서는 close_write이것으로 충분합니다. 일단 파일이 닫히면 후속 읽기로 인해 모든 데이터가 파일에 기록되고 파일을 수정한 원래 프로세스는 더 이상 그렇게 할 수 없습니다(파일을 다시 열지 않고). 이것아니요즉, 모든 데이터가 디스크에 있고 여전히 캐시에 있을 수 있지만 이를 읽는 프로세스에는 모든 데이터가 표시됩니다.

관련 정보