첫 번째 변경 후 inotify 스크립트가 중지됩니다.

첫 번째 변경 후 inotify 스크립트가 중지됩니다.

에서 영감을 받다이 슈퍼유저 답변다음 스크립트를 작성하여 copy_library.sh다음과 같은 파일과 동일한 폴더에 저장했습니다 library.bib.

#!/bin/sh
while inotifywait -e close_write library.bib; do
    cp -f ./library.bib ../other_place/ ;
    echo "Library copied"
done

./copy_library.sh첫 번째 복사 후 프로세스가 종료되면서 이 스크립트를 수동으로 시작하면 (성공적으로 작동함):

londonrob ~/mydir
> ./copy_library.sh 
Setting up watches.
Watches established.
library.bib CLOSE_WRITE,CLOSE 
Library copied
Setting up watches.
Watches established.
londonrob ~/mydir
>

더 이상 변경 사항이 추적되지 않습니다. 나는 이 스크립트로 뭔가를 해야 한다고 확신하므로 수동으로 시작할 필요 없이 "백그라운드에서" 계속 실행됩니다.

근데 뭐?

답변1

매뉴얼 페이지 에서 inotifywait:

inotifywait는 Linux의 inotify(7) 인터페이스를 사용하여 파일 변경을 효율적으로 기다립니다. 쉘 스크립트에서 파일 변경을 기다리는 데 적합합니다. 이벤트가 발생하면 종료하거나 이벤트가 발생할 때마다 계속해서 실행하고 출력할 수 있습니다.

그리고

-m, --monitor 단일 이벤트를 수신한 후 종료하는 대신 무기한 실행합니다. 기본 동작은 첫 번째 이벤트가 발생한 후 종료하는 것입니다.

편집: 15초마다 추가되는 로그가 있습니다. 다음 스크립트는 inotifyread가 출력한 각 줄에 대해 while 루프를 실행합니다.

#!/bin/sh

inotifywait -e modify /tmp/modem_log.csv -m | while read line; do
    echo "$line"
    echo "Copy coperation here..."
done

귀하의 경우에는 물론 이벤트(수정)를 close_write로 변경해야 합니다.

관련 정보