cron이 오류 메시지를 보내지 못하도록 방지

cron이 오류 메시지를 보내지 못하도록 방지

사용자 pi(Raspbian Stretch를 실행하는 Raspberry Pi)에 대해 15분마다 작업을 실행하도록 cron을 설정했습니다.

6,21,36,51 * * * * /usr/bin/mosquitto_sub -h Pi3Plus.local -v -C 1 -t weather >> weather.log

또한 Gmail을 통해 이메일을 보내도록 ssmtp를 설정했습니다.

cron 작업은 서버 연결에 자주 실패하고 오류 메시지를 생성합니다.

문제는 그런 다음 사용자 pi에게 메시지를 보내려고 시도하고 ssmtp가 이를 pi@gmail로 변경한 다음 Gmail로 보내지만 실패한다는 것입니다.

ssmtp, ssmtp.conf, cron, crontab에 대한 설명서를 읽었지만 이러한 메시지를 중지할 항목을 찾을 수 없습니다.

오류 생성을 방지하기 위해 cron 작업에서 오류 메시지를 캡처하는 스크립트를 작성할 수 있습니다.

답변1

~에서크론탭 매뉴얼:

LOGNAME, HOME 및 SHELL 외에도 cron(8)은 MAILTO를 조사하여 "this" crontab에서 명령을 실행했기 때문에 메일을 보낼 이유가 있는지 확인합니다. MAILTO가 정의되고 비어 있지 않으면 메일이 지정된 사용자에게 전송됩니다.MAILTO가 정의되었지만 비어 있는 경우(MAILTO="") 메일이 전송되지 않습니다.그렇지 않으면 이메일이 crontab 소유자에게 전송됩니다.

이 예제에 표시된 대로 crontab 파일의 맨 위에 변수를 추가하기만 하면 됩니다(동일한 매뉴얼 페이지에서 가져왔고 명확성을 위해 약간 편집됨).

# mail any output to 'paul', no matter whose crontab this is
MAILTO=paul
# run five minutes after midnight, every day
5 0 * * *       $HOME/bin/daily.job >> $HOME/tmp/out 2>&1

답변2

Cron은 명령이 stdout 또는 stderr로 출력을 "유출"하는 경우에만 이메일을 보냅니다.

cron 명령줄이나 스크립트 자체 내에서 리디렉션을 사용하여 전체 스크립트를 블록으로 래핑할 수 있습니다.

{ myMain; } >/dev/null 2>&1  #.. to discard all output.

{ myMain; } >>myCron.log 2>&1  #.. to have somewhere to check fails.

MAILTO="" 설정은 모든 크론 작업에 적용됩니다. 리디렉션을 사용하면 다양한 결과를 얻고 로그를 다양한 파일과 연결할 수 있습니다.

관련 정보