오류가 있는 경우 cron으로부터 이메일만 받을 수 있나요?
대부분의 경우 작업은 잘 실행될 것입니다. 출력에는 별로 관심이 없습니다.
드물게 실패하는 경우에만 알고 싶거나 알고 싶습니다.
나는 가지고있다프로그램 메일작동합니다. 그러나 제가 설명한 내용이 외부에서 cron을 관리하는 데 "올바른" 것인지 확실하지 않습니다.
답변1
명령은 chronic
다음에서 비롯됩니다.더 많은 유틸리티실패하지 않는 한 명령을 자동으로 실행합니다.
매뉴얼에서 인용하면 다음과 같습니다.
Chronic은 명령을 실행하고 명령이 실패하는 경우(0이 아닌 종료 또는 충돌)에만 표준 출력 및 표준 오류를 표시하도록 준비합니다. 명령이 성공하면 관련 없는 출력이 숨겨집니다.
Chronic의 일반적인 용도는 cron 작업을 실행하는 것입니다. 명령을 조용하게 유지하고 성공 시 예상치 못한 출력을 메일로 보내고 실패 시 충분히 자세한 출력을 처리하는 대신, 언제든지 명령을 장황하게 실행하고 만성을 사용하여 성공 시 출력을 숨길 수 있습니다.
답변2
출력에 관심이 없으므로 작업의 STDOUT을 로 리디렉션하고 STDERR이 메일로 전송되도록 할 수 있습니다 ( 환경 변수 /dev/null
사용 ).MAILTO
예를 들면 다음과 같습니다.
...
...
[email protected]
...
...
* * * * * /my/script.sh >/dev/null
STDERR(with STDERR)로만 출력되는 경우 메일을 보내고 STDOUT은 폐기됩니다.
물론 이는 프로그램이 STDERR에 쓸 때 이미 실패했다고 가정합니다. 항상 그런 것은 아닙니다. 프로그램을 제어할 수 있는 경우 프로그램이 이를 수행하도록 할 수 있습니다. 복잡한 상황의 경우 명령을 실행하고 그에 따라 메일을 보내려면 일종의 래퍼를 작성해야 합니다. 그리고 포장지를 cron
작업물로 활용해보세요.
답변3
오류가 있는 경우 cron으로부터 이메일만 받을 수 있나요?
다음과 같은 방법으로 cron 호출을 래핑할 수 있습니다.만성병 환자, 호출된 프로세스에 0이 아닌 반환 코드가 있거나 비추적 오류 출력이 없는 한 cron 출력을 사용하는 쉘 스크립트입니다.
cronic을 사용하려면 적절한 위치(예: )에 스크립트를 다운로드하십시오 . 설정이 올바른 경우 /usr/local/bin
crontab 항목 앞에 스크립트 경로(예: /usr/local/bin/cronic
)가 추가되거나 간단히 추가되어야 합니다.cronic
PATH
"오류"는 귀하의 질문에서 잘못 정의된 용어이므로 신중하게 정의해야 합니다. cronic을 유용하게 사용하려면 오류 조건을 정의하는 방식 중 하나로 cronic으로 래핑된 작업이 오류를 보고하는지 확인해야 합니다. 암시적 보고 방법(예: 텍스트 문자열 작성 STDOUT
)은 cronic 또는 기타 cron 보고 메커니즘과 호환되도록 하기 위해 추가 고려가 필요합니다.
cronic 사이트 링크에 표시된 대로 다른 래퍼도 사용할 수 있습니다.
답변4
처음부터 끝까지 이런 생각을 못했을 수도 있지만
* * * * * yourthing.sh >/tmp/yourthing.log && rm -f /tmp/yourthing.log; cat /tmp/yourthing.log 2>/dev/null
일반적인 경우 모든 것을 임시 파일( mktemp
고유한 파일 이름을 얻는 데 사용할 수 있음)로 리디렉션하고, 성공하면 파일을 삭제한 다음 cat
내용이 여전히 남아 있으면 내용을 다시 삭제합니다(예: yourthing.sh가 오류 조건), cron 메일러에서 수신했습니다.
메모리가 정상이라면 출력이 없으면 cron은 아무 것도 보내지 않으므로 로그 파일이 비어 있거나 존재하지 않으면 아무 일도 일어나지 않습니다. (오류 메시지를 다른 곳으로 리디렉션합니다.)