
작업을 잘못 설정하면 cron
자동으로 실패하는 것처럼 보입니다. 무엇이 잘못되었는지 이해하려면 오류 로그를 어디에서 찾아야 합니까?
답변1
다른 사람들이 지적했듯이, cron
실행되는 프로그램의 출력(출력이 있는 경우)을 이메일로 보내드립니다. 따라서 결과가 나오지 않으면 기본적으로 세 가지 가능성이 있습니다.
crond
프로그램을 실행하거나 이메일을 보내기 위해 쉘을 시작할 수도 없습니다.crond
출력물을 우편으로 보내는 데 문제가 있거나 우편물이 분실되었습니다.- 프로그램이 어떤 출력도 생성하지 않았습니다(오류 메시지 포함).
사례 1.은 거의 발생하지 않지만 cron 로그에 무언가가 기록되어야 합니다. Cron에는 자체적으로 예약된 syslog 기능이 있으므로 기능 메시지가 전송되는 /etc/syslog.conf
위치를 확인하려면 (또는 배포판의 동등한 파일)을 조사해야 합니다 . cron
인기 있는 목적지로는 /var/log/cron
, /var/log/messages
및 가 있습니다 /var/log/syslog
.
2번의 경우 메일러 데몬 로그를 검사해야 합니다. Cron 데몬의 메시지는 일반적으로 from 으로 나타납니다 root@yourhost
. crontab 파일의 한 줄을 사용하여 MAILTO=...
cron이 특정 주소로 이메일을 보내도록 할 수 있습니다. 그러면 메일러 데몬 로그를 더 쉽게 수집할 수 있습니다. 예를 들어:
[email protected]
00 15 * * * echo "Just testing if crond sends email"
3번의 경우, 효과를 쉽게 확인할 수 있는 다른 명령을 추가하여 프로그램이 실제로 실행되었는지 테스트할 수 있습니다.
00 15 * * * /a/command; touch /tmp/a_command_has_run
crond
따라서 의 mtime을 보면 실제로 무언가를 실행했는지 확인할 수 있습니다 /tmp/a_command_has_run
.
답변2
언제든지 작업 출력을 로그 파일로 명시적으로 보낼 수 있습니다.
0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1
crond 자체는 작업에서 어떤 출력도 수신하지 않기 때문에 이것이 이전에 언급한 메일 동작을 대체한다는 점을 명심하십시오. 이 동작을 유지하려면 tee(1)을 살펴봐야 합니다.
답변3
메일이 표시되지 않으면 root@yourcompany에 오류가 포함된 스팸 메일을 보내는 것일 수 있으며, 이는 모니터링을 위해 해당 계정을 사용하는 사람들에게 매우 짜증스러울 수 있습니다. 대신 Syslog로 출력을 보내 보십시오.
*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag
그런 다음 cronjob이 실행될 때까지 기다렸다가 /var/log/messages(또는 일부 시스템에서는 /var/log/user.log)에서 오류를 찾습니다.
이는 "yourcronjob: 명령을 찾을 수 없음"과 같이 길이가 1~2줄에 불과한 오류 메시지에 효과적입니다. 또한 기존 syslog 인프라(Logrotation, 중앙 syslogging, Splunk 등)를 활용합니다. 또한 이메일 스팸을 루트로 줄여줍니다.
cronjob이 수백 줄의 출력을 생성하는 경우 좋은 솔루션이 아닐 수 있습니다.
답변4
기본 cron 구성은 프로그램 출력과 함께 메일을 보냅니다. 이것이 실패하면 프로그램이 실패하지 않도록 보장하는 쉘 스크립트로 실패한 프로그램을 래핑하고 추가로 출력을 기록할 수 있습니다.
이는 일부 cron 구현에서 구성 가능한 설정입니다.