매번 특정 문자열을 캡처하고 알림을 보냅니다.

매번 특정 문자열을 캡처하고 알림을 보냅니다.

이것은 bash의 스크립트입니다.여기

실시간 동적 로그 파일에서 "오류: TCP 연결이 삭제되었습니다."라는 문자열을 캡처합니다. 다음 로그 데이터의 예가 포함된 로그 파일 "TcpRcpt.log"의 이름은 다음과 같습니다.


SAT Mar 26 19:55:37  2016 TCPRcpt-0297--ERROR: your TCP- connection is dead.
SAT Mar 26 19:55:37  2016 TCPRcpt-0297--RUNNING
SAT Mar 26 19:55:37  2016 TCPRcpt-0297--RUNNING
SAT Mar 26 19:55:37  2016 TCPRcpt-0298--ERROR: your TCP- connection is dead.

이제 단계를 발행하십시오. logtail TcpRcpt.log | grep -m 1 "ERROR: your TCP- connection is dead." | sed 's/.*TCPRcpt-/ PID /;s/ -//' >> LOGFILE.LOG

문자열을 캡처하지 못하더라도 항상 0 값을 제공합니다. 이로 인해 루프가 실행될 때마다 if 조건이 알림을 보냅니다.

이제 내 질문은: 다른 옵션이 있습니까? 문자열이 캡처될 때마다 이메일로 알림을 보내시겠습니까?

답변1

"항상 0의 값을 제공합니다." 이는 파이프라인의 마지막 명령인 sed의 종료 코드이기 때문에 대체가 발생하지 않아도 성공(0을 반환)합니다.

환경파이프 고장옵션은 파이프라인의 결과를 파이프라인의 첫 번째 실패한 명령(있는 경우)의 결과로 설정합니다. logtail을 호출하기 전에 이 옵션을 설정하여 스크립트를 수정하십시오.

    ...
    set -o pipefail
    logtail TcpRcpt.log | grep -m 1 "ERROR: your TCP- connection is dead." | sed 's/.*TCPRcpt-/ PID /;s/ -//' >> LOGFILE.LOG
    ...

관련 정보