크론 오류는 어디에 기록되나요?

크론 오류는 어디에 기록되나요?

작업을 잘못 설정 하면 cron자동으로 실패하는 것 같습니다. 무엇이 잘못되었는지 알아보려면 오류 로그에서 어디를 살펴봐야 합니까?

답변1

다른 사람들이 지적했듯이, cron실행되는 모든 프로그램의 출력은 (있는 경우) 이메일로 전송됩니다. 따라서 결과가 나오지 않으면 기본적으로 세 가지 가능성이 있습니다.

  1. crond프로그램을 실행하거나 이메일을 보내기 위해 쉘을 시작할 수도 없습니다.
  2. crond메일 출력에 문제가 있거나, 메일이 유실되었습니다.
  3. 프로그램이 출력을 생성하지 않습니다(오류 메시지 포함).

시나리오 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

따라서 crondmtime 을 보면 실제로 무언가가 실행되었는지 확인할 수 있습니다 /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 구현에서 구성 가능한 설정입니다.

관련 정보