로그 파일을 모니터링하고 다양한 상황에 따라 다양한 명령을 실행합니다.

로그 파일을 모니터링하고 다양한 상황에 따라 다양한 명령을 실행합니다.

모니터링하려는 로그 파일이 있고 충족되는 조건에 따라 다른 명령을 실행해야 합니다.

나는 이것에 가까운 해결책을 찾았습니다여기. 불행히도 그것은 나에게 작동하지 않으며 단지 터미널에 빈 줄을 제공합니다.

xterm -e "$path_to_program | tee -a ${log_path}" & tail -f ${log_path} | awk '/Initialization Sequence Completed/ { system("echo "VPN is running."") } /[HOST_NOT_FOUND]/ { system("echo "error"") }

내 문제를 해결하는 데 도움이 될 수 있는 다른 솔루션이 있습니까?

답변1

위의 예제 코드에서는 문자를 올바르게 이스케이프하지 않았습니다. 다음과 같은 것이 더 필요합니다.

tail -f ${log_path} | awk '/Initialization Sequence Completed/ { system("echo \"VPN is running.\"") } /\[HOST_NOT_FOUND\]/ { system("echo \"error\"")}'

logrotate를 사용해 볼 수도 있습니다. 해당 규칙을 활용하면 postrotate무한정 커지거나 저장 공간을 채우지 않는 로그를 로그 프로세서가 처리하도록 할 수 있습니다.

답변2

해결책앞으로작동하지만 내가 발견한 문제에만 해당됩니다. 어떤 이유로 awk는 2분마다 로그 파일만 읽은 다음 해당 시간에 로그에 HOST_NOT_FOUND가 몇 번 나타나기 때문에 "오류"로 터미널에 스팸을 보냅니다. 더 나은 해결책을 찾았습니다이것철사. 꼬리는 개별적으로 닫아야 한다는 점을 기억하세요.

tail -f ${log_path} | while read LOGLINE
do 
     [[ "${LOGLINE}" == *"Initialization Sequence Completed"*]] && echo "VPN is running"
     [[ "${LOGLINE}" == *HOST_NOT_FOUND"* ]] && echo "VPN failed."
done

관련 정보