inotifywait 루프의 신뢰성

inotifywait 루프의 신뢰성

디렉토리를 재귀적으로 감시하는 루프가 있는 bash 스크립트가 있습니다.

while true
do
    if path=`inotifywait -q -r -e create --format %w%f $watchpath`; then
        #modify file
    fi
done

내가 올바르게 기억한다면 다음과 같은 문제가 발생합니다.

해당 디렉터리에 많은 파일이 생성되거나 컴퓨터가 다른 작업으로 바쁜 경우 inotifywait해당 파일은 다시 도달하기 전에 생성되지 않을 수 있습니다. 즉, 해당 파일은 무시됩니다.

이를 완화할 수 있는 방법이 있나요? 수정된 파일 스트림/소스를 지속적으로 "모니터링"하고 처리하는 방법이 있을까요?

답변1

inotifywait한 가지 방법은 모니터 모드에서 실행하는 것입니다. 예를 들면 다음과 같습니다.

inotifywait -m -q -r -e create --format '%w%f' "$watchpath" |
    while read -r path; do
        : # do something with path
    done

그러나 프로세스 간에는 여전히 경쟁이 있을 것이며 쉘 유틸리티를 사용하여 경쟁 조건을 피할 수 있는 방법이 있는지 확실하지 않습니다.

~ 일지라도매뉴얼 페이지이를 메모 아래에 나열하십시오.

inotify API는 영향을 받는 파일을 파일 이름으로 식별합니다. 그러나 애플리케이션이 inotify 이벤트를 처리할 때 파일 이름이 삭제되거나 이름이 바뀌었을 수 있습니다.

답변2

감시 모드를 사용하므로 -m파일 inotifywait시스템 변경 후 종료되지 않고 표준 출력으로 출력됩니다. 이를 inotofywait의 행을 읽고 처리하는 판독기 스크립트로 스트리밍할 수 있습니다.

관련 정보