본문이 비어 있지 않은 경우 명령 행에서 메일 보내기 | mail -s Log email@domain.tld 문제는

로그가 변경되면 알려주는 간단한 스크립트를 작성하고 싶습니다. 이를 위해 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)로 시작된 스크립트에서 메시지를 보내는 데 유용합니다.


답변

참조 /unix//a/100720/27458를

ifne을 사용 하십시오 :

grep line /var/log/file | ifne mail -s Log email@domain.tld


답변