한 줄의 "플래그" 파일을 주기적으로 업데이트하는 블랙박스 시스템이 있습니다. 이 한 줄 파일은 시스템 수명 동안 FSM 상태에 따라 다양한 값을 갖습니다.
예를 들어 '다운로드', '확인', '게시' 등이 있습니다. 특정 시점에서 값이 다르기 때문에 소프트웨어는 "플래그" 파일을 열고 이를 잘라낸 후 새로운 한 줄 값을 작성해야 합니다.
연속적으로 다른 값의 로그를 어떻게 유지합니까? 비슷한 접근 방식을 고려했지만 tail -f
, 다른 값을 기록하고 소프트웨어가 해당 값을 업데이트할 때 파일 시스템을 방해하지 않는다는 것을 보장할 수 있었습니다. tail -f
잠시 후 "파일 잘림"으로 인해 간단한 방법이 실패합니다.
답변1
실패할 경우 파일 열기/읽기를 다시 시도하도록 할 수도 있습니다 tail -F
(대문자로 표시됨).
에서 man tail
:
-f, --follow[={name|descriptor}]
output appended data as the file grows; -f, --follow,
and --follow=descriptor are equivalent
-F same as --follow=name --retry
--retry
keep trying to open a file even when it is or becomes
inaccessible; useful when following by name, i.e., with
--follow=name
귀하의 버전 에 (동등 ) tail
이 없으면 inotify를 사용한 다음 close_write를 기다릴 수 있습니다( yes-F
tail -f=name --retry
inotifywait
이노티파이 도구):
file=foo
while inotifywait -qq -e close_write "$foo" >/dev/null; do
cat "$foo"
done > log
tail -F
이를 사용할 때 경쟁 조건이 있으므로 가능하다면 이 방법을 사용하는 것이 좋습니다 inotifywait
.