쉘 스크립트가 파일이 변경되고 조치를 취할 때까지 기다릴 수 있습니까?


12

파일의 변경 사항을 모니터링하고 변경 사항이 감지되면 일부 작업을 실행하는 스크립트를 작성할 수 있는지 궁금합니다.

상해:

  1. OpenVPN은 1 분마다 상태를 파일에 기록합니다.
  2. 이 상태 파일을 구문 분석하고 조치를 취해야합니다.
  3. OpenVPN은 쓰기 전에 상태 파일을 자릅니다.
  4. 명명 된 파이프에 쓰려고 시도했지만 파이프를 자르지 못하면 앱에서 바람직하지 않은 (치명적이지는 않은) 오류가 발생합니다.

수정이 실제로 파일에 추가 되는 경우 중단 tail -f이 가장 쉬운 방법 일 것입니다. 그러나 덧붙이 기 위해서만.
SF.

답변:


21

저렴하고 더러운 방법 :

stat -c %Y file수정 시간이 변경되면 루프 하고 조치를 취하십시오.

아마 더 나은 :

inotify cron 서비스를 사용하여 파일 수정 이벤트를 관찰하고 조치를 실행하십시오.

/path/to/your/file IN_MODIFY /path/to/your/script $#

두 번째 솔루션 +1
Michael Lowman


2

inotify가 올바른 방법 일 것입니다. 이 질문에 대한 튜토리얼은 일부 LinuxForYou 잡지 판에 나와 있습니다.


0

따라서 다음과 같은 스크립트가 있습니다.

1) () 통계를 사용하여 파일에서 확인 수정 시간을
수정 시간이 마지막을 선택하면보다 최신 인 경우) 2, 그것은 변경
3) 구문 분석 그것은 당신의 작업을 수행
RELOOP 후 1 분 4) 그 밖에 잠을하고


0

빠르고 더러운 방법 :

function wait_file_changed {
    tail -fn0 "$1" | head -n1
}

wait_file_changed /tmp/potato
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.