메시지가 중지되면 로그를 따르고 명령을 실행합니다.

메시지가 중지되면 로그를 따르고 명령을 실행합니다.

로그를 추적하고 특정 메시지를 찾는 스크립트를 작성해야 합니다. 스크립트는 메시지가 나타날 때 로그를 계속 모니터링해야 하며, 메시지가 5초 동안 다시 나타나지 않으면 명령을 실행하는 스크립트가 필요합니다.

이것은 의사코드입니다:

후행 로그 파일에서 "오류가 발생했습니다."라는 메시지가 발견되었습니다. 이 메시지는 10~20회 반복됩니다. 메시지 스크롤이 중지된 후 5초 동안 기다렸다가 "systemctl restart myservice"를 실행합니다.

awk를 사용하려고 하는데 명령을 실행하기 전에 메시지가 스크롤을 멈출 때까지 기다리는 방법을 알 수 없습니다. 이것은 내 코드입니다.

tail -F /var/log/mylog.log | awk '
                    /TestString goes here/ { system("sleep 5; systemctl restart myservice") }'

답변1

bashcorutils 및 중간 파일을 사용하여 timeout이 작업을 수행 할 수 있습니다.

server.bash를 다시 시작하십시오.

# Wait for the initial "TestString"
tail -n0 -F logfile |
while IFS= read -r; do 
  if [[ "$REPLY" == TestString ]]; then 
    break
  fi
done

# See if "TestString" repeats at least every 5 seconds
touch ts
while [ -e ts ]; do
  rm -f ts
  timeout 5 bash -c '
tail -n0 -f logfile |
while IFS= read -r; do 
  if [[ "$REPLY" == TestString ]]; then 
    touch ts
  fi
done
'
done

systemctl restart myserver

바라보다그렉의 위키Bash 읽는 동안 루프에 대한 추가 정보.

관련 정보