`tail -f`의 출력을 파일로 플러시하시겠습니까?

`tail -f`의 출력을 파일로 플러시하시겠습니까?

많은 수의 로그 메시지를 덤프하는 애플리케이션이 있습니다. 이 로그의 중간 부분, 즉 이벤트에 대한 반응을 포착하고 싶습니다.

이것을 시도했습니다 :

tmpfile=`mktemp`
tail -n1 -f appA_log_file.txt >> $tmpfile  &
appB_sends_events_to_appA
sleep 1
pkill tail
cat $tmpfile
rm $tmpfile

이 스크립트는 작동합니다. 하지만 걱정됩니다 sleep 1. tail거대한 로그의 변경 사항을 확인하고 이를 임시 파일에 기록해야 합니다 . 그것이 없으면 실행 직전 한 줄만 보입니다 appB.

tail버퍼에 있는 내용을 강제로 플러시하거나 아직 읽지 않고 종료하는 방법이 있습니까 pkill?

다음을 사용해 보세요 stdbuf:

stdbuf -i0 -o0 tail -n1 -f appA_log_file.txt >> $tmpfile  &

하지만 여전히 sleepbefore 가 필요합니다 pkill.

아니면 전체 문제를 해결하는 더 좋은 방법이 있습니까?

답변1

자, 문제 해결의 열쇠는 -s0.tail

대안으로 다음을 시도해 보십시오.

echo '-start' >> appA_log_file.txt
appB_sends_events_to_appA
echo '-end' >> appA_log_file.txt
sed '/-start/,/-end/p' appA_log_file.txt

appA하지만 로그를 단독 모드로 저장하고 파일에 태그를 삽입할 수 없기 때문에 실패합니다 .

그러나 tail -s0 -f그것은 훌륭하게 작동합니다.

관련 정보