![Bash: 파일 생성을 폴링하고 종료 시 종료합니다.](https://linux55.com/image/76132/Bash%3A%20%ED%8C%8C%EC%9D%BC%20%EC%83%9D%EC%84%B1%EC%9D%84%20%ED%8F%B4%EB%A7%81%ED%95%98%EA%B3%A0%20%EC%A2%85%EB%A3%8C%20%EC%8B%9C%20%EC%A2%85%EB%A3%8C%ED%95%A9%EB%8B%88%EB%8B%A4..png)
종료 신호를 포착하고 종료하는 스크립트를 작성하려고 합니다. 일반적인 bash 트랩 접근 방식을 사용하는 대신 10초마다 파일 생성을 모니터링하고 종료하기 전에 일부 항목을 정리하고 싶습니다.
내가 시도한 것은 다음과 같습니다.
poll_time=10 // poll every 10 seconds
((term_time=$SECONDS+240)) // monitor until 4 min from current script time exec
while (( $SECONDS < $term_time)) do
if [[ -r $some_path/file.txt ]]; then
cleanup_function
exit
fi
sleep ${poll_time}
done
//if file doesnt exit continue with below code
//blah blah blah ....
더 좋은 방법이 있나요? 위의 코드 줄이 작동할까요?
답변1
inotifywait
from이 inotify-tools
필요한 것입니다(적어도 살펴보세요). 다음과 같은 줄은 스크립트에서 원하는 것과 동일한 작업을 수행합니다.
inotifywait -e create --timeout 240 "${some_path}/file.txt" && { cleanup_function; exit ; }
차이점 inotifywait
은 이벤트 기반 방식으로 작동하므로 폴링이나 수면이 필요하지 않다는 것입니다.