스크립트에서 오류가 발생할 때 오류 로그가 포함된 이메일을 보내도록 cron을 어떻게 얻나요?

스크립트에서 오류가 발생할 때 오류 로그가 포함된 이메일을 보내도록 cron을 어떻게 얻나요?

SQL 데이터베이스에서 오류를 확인하고 오류를 로그 파일에 기록하는 스크립트를 실행하는 cron 작업이 있습니다. 로그 파일은 스크립트를 실행하는 명령에 제공됩니다. 스크립트에서 오류가 발견된 경우에만 이메일을 받고 싶고, 이메일에 로그가 포함되기를 원합니다. 스크립트에서 오류가 발견되지 않으면 이메일을 받고 싶지 않습니다. 분명히 스크립트는 오류를 찾거나 찾지 못할 때 로그에 기록합니다(저는 이것을 작성하지 않았습니다).

    20 6-10 * * 1-5 ~/job_failure_test.sh -o ~/job_fail.log 2>&1 /dev/null | mail -s "Errors" [email protected] < ~/job_fail.log

지금까지 이 줄은 로그에 오류가 기록될 때 나에게 이메일을 보내지만 업데이트된 로그를 보내지는 않습니다. 마지막으로 실행된 크론 작업의 로그를 나에게 보냅니다.

답변1

그냥 바꾸세요(A관로)에서 ||또는) (스크립트가 종료 코드를 올바르게 사용한다고 가정) 오류 발생 시에만 출력하도록 스크립트를 변경하는 것이 더 좋지만:

[email protected]
[email protected]
20 6-10 * * 1-5 ~/job_failure_test.sh

추악한 방법;

20 6-10 * * 1-5 ~/job_failure_test.sh > ~/job_fail.log 2>&1 || mail -s "Errors" [email protected] < ~/job_fail.log

답변2

이 기능은 cron에 내장되어 있습니다! 명령이 출력을 생성하거나 0이 아닌 상태를 반환하는 경우 cron이 이메일을 보냅니다.

많은 최신 배포판에서는 로컬 이메일을 설정하지 않습니다. 그렇지 않은 경우 메일 전송 에이전트(MTA)를 설치하십시오. 예를 들어 참조하십시오.이 스레드우분투의 경우 또는메일을 로컬로 전달하기 위한 최소 MTA(cron용)?최소한의 것을 절대적으로 원한다면. 아니면 Exim이나 Postfix와 같은 일반적인 MTA를 설치하고 로컬 전달 전용으로 구성합니다(예:이 스레드) 데비안의 경우. 로컬 이메일을 설정한 후 즐겨 사용하는 메일 클라이언트를 사용하여 로컬 이메일을 읽을 수 있습니다.

이메일을 로컬에서 읽는 대신 파일을 만들 수 있습니다~/.forward모든 로컬 이메일이 전달될 외부 이메일 주소가 포함되어 있습니다. 전달을 선택하는 경우 외부로 메일을 보낼 수 있는 MTA가 있어야 합니다("스마트 호스트").

또는 MAILcrontab에서 변수를 설정하여 해당 주소로 직접 이메일을 보내세요. 또한 시스템이 외부로 이메일을 보낼 수 있어야 합니다.

관련 정보