cron 작업이 실패했을때만 이메일 전송하기


cron 은 작업 실행 결과에 대해서 이메일로 전송하는데 이로 인해 자주 실행하는 작업이 있을 경우 cron 이 보낸 메일이 너무 많아지게 됩니다.

다음 방법으로 cron 작업 결과 mail 전송 여부를 설정할 수 있습니다.

MAILTO 환경 변수


1. cron 은 MAILTO 환경 변수가 있고 공백이 아닐 경우 MAILTO 에 지정한 이메일 주소에 작업 결과를 보고합니다.


예로 다음과 같이 설정했을 경우

MAILTO="foo@bar.com"

* * * * * df -h

1분마다 df 의 결과를 foo@bar.com 에 보내게 됩니다.


2. 만약 MAILTO 변수가 있고 값이 비어 있을 경우는 메일을 보내지 않습니다.

MAILTO=""

* * * * * df -h

위와 같이 설정한 경우 df 의 결과에 대해서 메일을 보내지 않습니다.


3. MAILTO 환경 변수가 없을 경우 cron 작업의 소유자에게 메일을 전송합니다.


cron 작업 실패시만 메일 전송

cron 작업이 실패했을 경우에만 메일을 보내려면 MAILTO 에 수령인 정보를 설정한 후에 표준 출력(STDOUT)은 /dev/null 로 redirection 하고 표준 에러(STDERR) 은 redirection 하지 않으면 됩니다.


즉 아래와 같이 설정되어 있을 경우 some_script 실행 결과는 메일로 전송되지 않습니다.

MAILTO="foo@bar.com"
0 5 * * * /bin/some_script > /dev/null


다음과 같이 설정하면 실패한 작업만 메일로 전송합니다.

MAILTO="foo@bar.com"
0 5 * * * /bin/some_script > /dev/null 2>&1



Ref