it-swarm-ko.tech

크론 오류는 어디에 기록됩니까?

cron 작업을 잘못 설정하면 자동으로 실패한 것으로 나타납니다. 무엇이 잘못되었는지 이해하려면 오류 로그를 어디에서 찾아야합니까?

182
Brian Lyttle

다른 사람들이 지적했듯이 cron는 실행되는 프로그램의 출력을 출력합니다 (출력이있는 경우). 따라서 출력을 얻지 못하면 기본적으로 세 가지 가능성이 있습니다.

  1. crond 프로그램을 실행하거나 이메일을 보내기 위해 셸을 시작할 수 없습니다
  2. crond에서 출력물을 우편 발송하는 데 문제가 있거나 메일이 유실되었습니다.
  3. 프로그램에서 출력을 생성하지 못했습니다 (오류 메시지 포함)

사례 1은 매우 드물지만 cron 로그에 무언가 기록되어 있어야합니다. Cron에는 자체 예약 된 syslog 기능이 있으므로 시설 cron의 메시지가 전송되는 위치를 확인하려면 /etc/syslog.conf (또는 배포판의 동등한 파일)를 확인해야합니다. 인기있는 목적지는 /var/log/cron, /var/log/messages/var/log/syslog입니다.

사례 2의 경우 mailer 데몬 로그를 검사해야합니다. Cron 데몬의 메시지는 일반적으로 [email protected]에서 나타납니다. 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

/tmp/a_command_has_run의 mtime을보고 crond가 실제로 무언가를 실행했는지 확인할 수 있습니다.

116
Riccardo Murri

작업 출력을 항상 명시 적으로 로그 파일로 보낼 수 있습니다.

0 8 * * * /usr/local/bin/myjob > /var/log/myjob.log 2>&1

Crond iself는 작업에서 출력을 수신하지 않으므로 이전에 언급 한 메일 동작을 대체합니다. 이 동작을 유지하려면 tee (1)를 살펴보십시오.

54
codehead

메일이 보이지 않으면 해당 계정을 사용하여 모니터링하는 사람들에게 매우 성 가실 수있는 오류로 root @ yourcompany를 스팸으로 보내는 것일 수 있습니다. 대신 Syslog로 출력을 보내보십시오.

*/5 * * * * yourcronjob 2>&1 | /usr/bin/logger -t yourtag

그런 다음 cronjob이 실행될 때까지 기다렸다가/var/log/messages (또는 일부 시스템의 경우 /var/log/user.log)에서 오류를 찾으십시오.

"yourcronjob : command not found"와 같이 1-2 줄 길이의 오류 메시지에 적합합니다. 또한 기존 syslog 인프라 (Logrotation, central syslogging, Splunk 등)를 사용합니다. 또한 이메일 스팸을 루트로 줄입니다.

Cronjob이 수백 줄의 출력을 생성하는 경우 좋은 해결책이 아닐 수 있습니다.

44
Stefan Lasiewski

작업이 실행되지 않거나 0이 아닌 종료 코드를 리턴하면 crond에서 이메일을 받아야합니다. 입력 해보십시오.

$ mailx

명령 프롬프트에서.

mailx(1)은 대부분의 모든 유닉스 계열 시스템에서 기본 메일 읽기 프로그램입니다. 현대 표준에서는 매우 원시적이지만 항상 사용할 수 있다고 생각할 수 있습니다. 다른 더 나은 메일 에이전트를 사용할 수 있지만 사용중인 임의의 컴퓨터에 어떤 에이전트가 설치되어 있는지 알 수 없을 정도로 충분합니다.

시스템을 인터넷 이메일 서버로 구성하지 않은 경우이 메일 서브 시스템은 시스템 내에서만 사용됩니다. 기기의 다른 사용자와 이메일을주고받을 수는 있지만 전 세계로 이메일을 보내지 못할 수도 있으며 외부 세계의 이메일은 확실히 기기에 올 수 없습니다.

8
Warren Young

기본 크론 구성은 프로그램의 출력과 함께 메일을 보냅니다. 이것이 실패하면 실패한 프로그램을 쉘 스크립트로 랩핑하여 프로그램이 실패하지 않도록하고 출력을 더 기록 할 수 있습니다.

이것은 일부 cron 구현에서 구성 가능한 설정입니다.

8
miguel.de.icaza

Cron은 기본 정보를 /var/log/messages이지만 모든 프로그램 출력을 호출하는 사용자에게 메일로 보냅니다.

5
Hemant

나는 몇 년 전에 같은 문제가 발생 하여이 스레드를 우연히 발견했으며 최근 최근에 위에서 언급 한 Ricardo의 솔루션에 대한 해결책을 발견했습니다. 이메일의 부족은 감지하기 어렵고 (앞서 언급했듯이) root @ yourcompany 이메일을 스팸으로 보내고 싶지 않습니다. 관심이 있으시다면 deadmanssnitch.com. 을 확인하십시오. 이 도구는 위에서 언급 한 경우를 해결하는 것 같습니다. 사용하기 매우 간단 해 보입니다. 도구가 제공하는 코드를 cronjob에 추가하면됩니다. 작업이 지정된 내부에서 실행되지 않으면 경고가 표시됩니다. 작업이 다시 시작되면 경고가 표시됩니다.

2
ss_jt

vixie-cron를 사용하므로 이것이 모든 것에 적용되는지 모르겠습니다. 그러나 작업의 모든 출력을 포함하는 dead.letter 파일이 있습니다.

/root/ 폴더에 crons.cron를 실행하여 crontab으로 설정 한 crontab /root/crons.cron가 있습니다. dead.letter에도 /root/가 생성됩니다.

Edit Google에 dead.letter를 전달했는데 배송 할 수없는 메일입니다. 그것은 분명히 cron과 관련이 없습니다. 메일이 올바르게 설정되지 않은 경우 (나와 같이) 파일이 있습니다.

1
jonescb

또 다른 유용한 트릭은 실제로 실행되는 스크립트를 보는 것입니다.

이것은 run-parts -v --test /etc/cron.hourly/

> /etc/cron.hourly//logrotate

스크립트가 표시되지 않으면 실행되지 않습니다.

이 btw는 /etc/cron.hourly 디렉토리. crontab에 설정된 항목은 표시되지 않습니다.

1
RickyA

초보자에게는 디버깅하기가 어려울 수 있습니다. 분과 시간 값을 서로 바꾸지 마십시오. 분이 먼저 온 다음 시간입니다. 각각에 대해 12 미만의 값을 제공하면 값을 승인하지만 예상대로 작동하지 않거나 전혀 작동하지 않을 수 있습니다.

0
Michael Woyo