tail -f, 파일이 더 이상 [닫기]에 기록되지 않는지 확인합니다.

tail -f, 파일이 더 이상 [닫기]에 기록되지 않는지 확인합니다.

tail -f로그 파일의 증가를 추적하는 데 사용합니다 . 로그 파일에 쓰는 프로세스(충돌하거나 종료될 때)가 더 이상 해당 파일에 액세스하거나 쓰지 않는지 여부를 감지하는 방법을 찾을 수 없습니다.

이것은 내가 사용하는 스크립트입니다.

tail -f log_file | while read LOGLINE
do
  echo -e "${LOGLINE}"
  if [[ "${LOGLINE}" == *ERROR* ]] ; then
  echo -e "ERROR FOUND : ${LOGLINE}\n"

  # handle the error here

  fi
done

로그 파일에 쓰는 프로세스가 중지되었음을 감지하고(또는 tail -f가 더 이상 입력을 허용하지 않음) 이벤트를 알리는 메시지를 화면에 표시하는 가장 간단하고 효율적인 방법은 무엇입니까?

답변1

적어도 Linux를 실행하고 있다면 거꾸로 가고 있는 것입니다. inotify작성 중인 파일에 반응을 사용해야 합니다 .

#!/bin/sh
while inotifywait -qe modify filename
do

done

그게 다야.

답변2

로그 파일이 열려 있는 모든 프로세스의 프로세스 ID를 얻으려면 다음을 사용하십시오 lsof.

lsof -Fp /path/to/your/logfle

이는 실제로 파일을 연 프로세스만 표시한다는 점에 유의하세요. 실제로 파일에 써야 하는 짧은 순간을 제외하고는 파일을 닫힌 상태로 유지하는 프로그램을 놓칠 수 있습니다.

lsof스크립트 친화적이며 다양한 옵션이 있습니다. 바라보다 man lsof.

다음은 로그 파일이 열려 있는 프로세스가 없을 때 화면에 메시지를 쓰는 스크립트입니다.

while lsof -Fp /tmp/mylogfile  >/dev/null
do
    sleep 1
done
echo "No processes have the log file open"

위에 문제가 있습니다. tail -f프로세스가 파일을 엽니다. 파일을 여는 프로세스 수가 2개 미만일 때 이 메시지를 표시할 수 있습니다.

while [ "$(lsof -Fp /tmp/mylogfile | wc -l)" -ge 2 ]
do
    sleep 1
done
echo "There are less than two processes with the log file open"

답변3

#!/bin/bash
PROC=apache2 # insert your process name here

while true; do
    pgrep $PROC > /dev/null # hides pgrep's output
    if [[ $? -ne 0 ]]; then
        echo "Call 911 $PROC died!" 1>&2 # redirects to stderr
        exit
    fi
    sleep 1
done

그래서 이렇게 호출 lifealert.sh하고 백그라운드에서 이렇게 실행할 수 있습니다../lifealert.sh &

if 문이 실행되면 stderr로 인쇄되며 파일을 추적할 때 터미널에서 이를 볼 수 있습니다.

관련 정보