로그가 변경되면 알려주는 간단한 스크립트를 작성하고 싶습니다. 이를 위해 grep을 사용하여 관심있는 줄을 찾습니다. 지금은 다음과 같이 작동합니다.
grep line /var/log/file | mail -s Log email@domain.tld
문제는 일치하는 줄이 없어도 메일을 보낸다는 것입니다. mailutils의 메일 유틸리티에는 빈 본문이있는 메일을 삭제하라는 스위치가없는 것 같습니다.
그렇게하는 빠르고 쉬운 방법이 있습니까?
답변
output=$(grep line /var/log/file); [[ -n "$output" ]] && mail -s Log email@domain.tld
또는 이것을 cron 작업으로 만든 다음 출력을 생성하면 사용자에게 전자 메일을 보냅니다. / etc / aliases 파일을 편집 한 다음 newaliases 명령을 실행하여 상자에없는 주소로 메일을 보낼 수 있습니다.
cron 항목의 Ex (제목 줄을 설정할 수 없습니다.
1 0 * * * grep line /var/log/file
또는 ifne 유틸리티를 얻을 수 있습니다-아마도 원하는 것입니다.
grep 라인 / var / log / file | ifne mail -s 로그 email@domain.tld
ifne 명령은 centos와 RHEL을 위해 epel repo에서 사용할 수 있습니다. 온라인 맨 페이지에 대한 링크를 찾을 수 없지만
ifne (1)
ifne (1)NAME ifne-표준 입력이 비어 있지 않은 경우 명령 실행
시놉시스 ifne [-n] 명령
DESCRIPTION ifne은 표준 입력이 비어 있지 않은 경우에만 다음 명령을 실행합니다.
옵션 -n 역 동작. 표준 입력이 비어 있으면 명령을 실행하십시오.
Note that if the standard input is not empty, it is passed through ifne in this case.
예 찾기. 이름 코어 | ifne mail -s “핵심 파일이 발견되었습니다”루트
저자 저작권 2008 년 Javier Merino
Licensed under the GNU GPL 2008-05-01 ifne(1)
답변
“man mail”은 -E 인수가 body가 비어 있으면 메일 전송을 중지한다고 알려줍니다. 나를 위해 잘 작동합니다.
-이자형
발신 메시지의 첫 번째 또는 유일한 메시지 부분에 텍스트가 포함되어 있지 않으면 메시지를 보내지 말고 자동으로 삭제하여 프로그램 시작시 skipemptybody 변수를 효과적으로 설정하십시오. cron (8)로 시작된 스크립트에서 메시지를 보내는 데 유용합니다.
답변
ifne을 사용 하십시오 :
grep line /var/log/file | ifne mail -s Log email@domain.tld