마지막으로 셸 스크립트를 통해 데이터에 현실적인 백업 일정을 설정했습니다.이 스크립트는 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>&1
STDERR을 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로 출력 되더라도 여전히 이메일을받을 수 있기 때문입니다.