
모니터링하려는 로그 파일이 있고 충족되는 조건에 따라 다른 명령을 실행해야 합니다.
나는 이것에 가까운 해결책을 찾았습니다여기. 불행히도 그것은 나에게 작동하지 않으며 단지 터미널에 빈 줄을 제공합니다.
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