작업을 잘못 설정 하면 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
. MAILTO=...
crontab 파일의 한 줄을 사용하여 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, Central Syslogging, Splunk 등)를 활용합니다. 또한 스팸 소스도 줄어듭니다.
cronjob이 수백 줄의 출력을 생성하는 경우 이는 좋은 솔루션이 아닐 수 있습니다.
답변4
기본 크론 구성은 프로그램의 출력이 포함된 이메일을 보냅니다. 실패하면 실패한 프로그램을 쉘 스크립트로 래핑하여 프로그램이 실패하지 않는지 확인하고 추가로 출력을 기록할 수 있습니다.
이는 일부 cron 구현에서 구성 가능한 설정입니다.