본문이 비어 있지 않은 경우 명령 행에서 메일 보내기


12

로그가 변경되면 알려주는 간단한 스크립트를 작성하고 싶습니다. 이를 위해 grep을 사용하여 관심있는 줄을 찾습니다. 지금은 다음과 같이 작동합니다.

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

문제는 일치하는 줄이 없어도 메일을 보낸다는 것입니다. mailutils의 메일 유틸리티에는 빈 본문이있는 메일을 삭제하라는 스위치가없는 것 같습니다.

그렇게하는 빠르고 쉬운 방법이 있습니까?

답변:


12
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)

2
출력을 생성하지 않으면 grep이 0이 아닌 것으로 종료되므로 다음과 같이 수행 할 수 있습니다. output = $ (grep line / var / log / file) && echo "$ output"| mail -s 로그 user@example.com
Sean Reifschneider

또한 제안 된 명령은 "$ output"을 mail 명령으로 보내지 않습니다. :-)
Sean Reifschneider가

나는 @Sean Reifschneider에 의해 제안 된 솔루션을 포함하는 대답을 편집 제안
향미료에

참고로 ifne에서 발견되는 moreutils우분투 패키지로 제공된다. 불행히도 그 패키지는 패키지 parallelparallel명령 과 충돌하는 원인 이 parallel됩니다.
artfulrobot 2018 년

14

"man mail"은 -E 인수가 body가 비어 있으면 메일 전송을 중지한다고 알려줍니다. 나를 위해 잘 작동합니다.

-이자형

발신 메시지의 첫 번째 또는 유일한 메시지 부분에 텍스트가 포함되어 있지 않으면 메시지를 보내지 말고 자동으로 삭제하여 프로그램 시작시 skipemptybody 변수를 효과적으로 설정하십시오. cron (8)로 시작된 스크립트에서 메시지를 보내는 데 유용합니다.


3
Ubuntu 12.04에는 GNU Mailtools 2.1이 설치되어 있으며 "mail"에 대한 "-E"옵션은 --exec의 약어입니다. "빈 바디"옵션을 포함하지 않습니다.
Mark Stosberg

3
@MarkStosberg : Ubuntu에는 mail또는 mailx명령을 제공하는 여러 개의 대체 패키지가 있습니다. bsd-mailxheirloom-mailx패키지 둘 다 제공 mailx-E옵션이 여기에 설명.
Smylers

1
: 6.5에 CentOS에 나를 위해 일한grep "find me" /var/log/something | mail -s "That text you were looking for is now in the logs" -E mail@example.com
user2208096

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.