Cron : 이메일에만 오류가 발생합니까? 때마다 빈 이메일이 계속 전송됩니다. 무언가 잘못되었을 때만

마지막으로 셸 스크립트를 통해 데이터에 현실적인 백업 일정을 설정했습니다.이 스크립트는 cron이 좁은 간격으로 처리합니다. 불행히도 CRON이 실행될 때마다 빈 이메일이 계속 전송됩니다.

무언가 잘못되었을 때만 CRON이 이메일을 보내도록 할 수 있습니까? 내 TAR의도대로 실행되지 않습니까?

다음은 현재 crontab을 설정하는 방법입니다.

0 */2 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" email@example.com

고마워요!



답변

이상적으로 모든 것이 예상대로 진행되면 백업 스크립트가 아무 것도 출력하지 않고 무언가 잘못되었을 때만 출력을 생성하는 것이 좋습니다. 그런 다음 MAILTO 환경 변수를 사용하여 스크립트에서 생성 된 출력을 전자 메일 주소로 보내십시오.

MAILTO=email@example.com
0 */2 * * * /bin/backup.sh

스크립트가 일반적으로 출력을 생성하지만 cron에서 신경 쓰지 않으면 / dev / null로 보내면 stderr에 무언가가 쓰여질 때만 이메일로 보내집니다.

MAILTO=email@example.com
0 */2 * * * /bin/backup.sh > /dev/null


답변

cronic wrapper 스크립트를 사용 하는 것은 좋은 생각입니다. 그것을 사용하기 위해 당신은 당신의 스크립트를 변경할 필요가 없습니다.

대신에:

 0 1 * * * /bin/backup.sh 2>&1 | mail -s "Backup status" email@example.com

하다:

 MAILTO=email@example.com
 0 1 * * * cronic /bin/backup.sh

간단히 말하면; 모든 것이 순조롭게 진행되면 (종료 상태 0) 자동으로 실행되지만, 그렇지 않으면 상세하게보고하고 cron이 메일보고를 처리하게합니다.

https://habilis.net/cronic/에 대한 자세한 정보 .


답변

당신은 (그런데) 있어야 성공할 cron때에도 항상 이메일을 보내도록 지시 하고 /bin/backup.sh있습니다 /usr/local/bin. | mail -s "Backup status" email@example.com부품을 생략하면 출력이있을 때만 이메일이 전송됩니다. 아마도 (에 따라 cron) crontab 파일에서 이메일 주소를 mail로 지정할 수 있습니다.

자세한 내용은

man 5 crontab


답변

당신은 지시한다 stderr둘 anmd을 stdout하고 stderr.

사용 1> /dev/null하지 않으면 2>&1괜찮습니다. 또한 백업 스크립트에서 오류를 올바르게보고해야 할 수도 있습니다.


답변

몇 년 동안 성공적으로 활용 한 또 다른 변형은 다음과 같습니다. 출력을 캡처 하여 오류시에만 출력 하여 이메일을 트리거합니다. 임시 파일이 필요하지 않으며 모든 출력을 유지합니다 . 중요한 부분은 2>&1STDERR을 STDOUT으로 리디렉션 하는 것 입니다.

기본 크론 메일러 설정을 통해 전체 출력을 보냅니다.

1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT"

동일하지만 특정 주소와 주제가있는 경우 :

( 전체 crontab 파일에 대해 MAILTO = xxxx 를 설정하여 주소를 변경할 수도 있습니다 )

1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT" | mail -s "Failed to backup" an@email.address

오류에 대해 여러 작업을 수행하고 이메일에 추가 할 수도 있습니다.

1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || {echo "$OUTPUT" ; ls -ltr /backup/dir ; }

이것은 간단한 명령에 효과적입니다. 복잡한 파이프 ( find / -type f | grep -v bla | tar something-or-other)를 다루는 경우 명령을 스크립트로 옮기고 위에서 언급 한 접근법을 사용하여 스크립트를 실행하는 것이 좋습니다. 파이프의 일부가 STDERR로 출력 되더라도 여전히 이메일을받을 수 있기 때문입니다.


답변