왜 내 crontab이 트리거되지 않았습니까? 알았습니다. 이것을 어떻게 디버깅

내가 사용하는 crontab -e내의 crontab에 다음 줄을 추가 :

* * * * * echo hi >> /home/myusername/test

그러나 테스트 파일이 작성되었음을 알 수 없습니다. 이것은 권한 문제입니까, 아니면 crontab이 올바르게 작동하지 않습니까?

cron 프로세스가 실행되고 있음을 알았습니다. 이것을 어떻게 디버깅 할 수 있습니까?

편집 -Ask Ubuntu는 crontab대해 좋은 질문 을하지만 불행히도 여전히 도움이되지 않습니다.

편집 2- 흠, 내 테스트 파일에 214 줄이있는 것 같습니다. 즉, 마지막 214 분 동안 매분마다 쓰여졌습니다. 문제가 무엇인지 잘 모르겠지만 분명히 사라졌습니다.



답변

cron매분마다 업데이트 된 crontab 파일을 확인하고 다음 분까지 새로운 항목을 고려하지 않는 구현이 있습니다 (모두는 아니며 어떤 오프 손을 기억하지 않지만 Linux에서 하나를 만났습니다). . 따라서 crontab을 처음 시작하는 데 최대 2 분이 걸릴 수 있습니다. 이것은 당신이 관찰 한 것일 수 있습니다.


답변

cronjob 뒤에 빈 줄 을 추가 했습니까 ?


답변

나는 같은 문제가 있었다-끝에 새로운 항목을 추가 한 후 작동하는 crontab이 갑자기 중지되었습니다. 마지막 줄 다음에 줄 바꿈을 잊어 버린 것으로 나타났습니다.

나는 명령을 내려서 알았다

cat /var/log/syslog | grep crontab

결과는 문제를 보여주었습니다.

Jul  2 08:16:01 shiva cron[1254]: (*system*) RELOAD (/etc/crontab)
Jul  2 08:16:01 shiva cron[1254]: (*system*) ERROR (Missing newline before EOF, this crontab file will be ignored)

개행을 추가하고 저장하면 문제가 해결되었습니다.


답변

이 소리는 고정되어 있습니다. 다음에는 STDERR도 기록해보십시오. 다음은 STDERR이 아닌 STDOUT에만 로그합니다.

* * * * * echo hi >> /home/myusername/test

STDERR에 대한 명시 적 절도 있는지 확인하십시오. 그렇지 않으면 Cron의 구성 방식에 따라 STDERR이 전자 메일을 통해 사용자에게 전자 메일을 보내거나 (전자 메일이 작동한다고 가정) 전혀 전송되지 않을 수 있습니다.

* * * * * echo hi >> /home/myusername/test 2> /home/myusername/test.stderr

내 취향은 syslog에 cronjob에 출력을 보내는 것입니다. 그렇게하면 기존의 syslog 인프라 (중앙 syslog, Splunk, 이미 지원되는 로그 회전, / var / log / messages & / var / log / cronjob 등의 메시지를 쉽게 비교할 수 있음)를 이용하고 있습니다. 불필요한 이메일로 sysadmins (me)를 스팸 발송합니다.

* * * * * echo hi >> /home/myusername/test 2>&1 | /usr/bin/logger -t mycronjob

답변

나에게 문제는 스크립트가 실행 가능하지 않다는 것이었다. 나는 이런 식으로 crontab -e 설정을했다.

* * * * * /bin/my-script.sh

그리고 myscript 파일이 실행 가능하지 않아서

chmod +x my-script.sh

즉시 예상대로 출력을보기 시작했습니다.


답변

로 변경 myusernae하면 컴퓨터에서 cron 라인이 제대로 작동합니다 phunehehe. 시스템에 어떤 문제가 있는지 알아내는 방법에는 여러 가지가 있습니다.

Cron은 일반적으로 문제가있을 때 사용자에게 메일을 보냅니다. “메일이 있습니다”라는 메시지가 표시되면 메일 클라이언트를 사용 하여받은 편지함확인하십시오 . 또는 홈 디렉토리를 확인하십시오 dead.letter. 이름 이 지정된 파일이있을 수 있습니다 .

/var/log/cron과 관련된 항목을 확인할 수 있습니다 . 내 컴퓨터에서 로그 파일은 /var/log/cron/current(루트 액세스 필요)에 있습니다.

루트 액세스 권한이 있으면 cron 데몬을 중지하고 디버그 모드에서 시작할 수 있습니다. 예를 들어 ( fcron데몬 이름으로 변경) 을 사용 합니다.

killall fcron
fcron --foreground --debug

답변

cron이 실패하면 해당 컴퓨터에서 cron 작업의 사용자 ID에 대한 이메일을 생성합니다. 컴퓨터에서 MTA가 작동하지 않거나 다른 곳에서 해당 메일을 읽거나 전달하지 않으면 MTA가 작동하더라도 해당 메시지가 표시되지 않습니다.

메일을 통해 crontab의 오류를 얻는 좋은 방법은 crontab을 다음과 같이 만드는 것입니다.

MAILTO="myemail@example.com"
* * * * * echo hi >> /home/myusernae/test

당연히 myemail@example.com 대신 이메일 주소를 사용하십시오. 이것은 cron에게 로컬 계정이 아닌 이메일 주소로 오류를 보내도록 지시합니다. 특히 이것은 단지 출력을 보내려는 루트 crontab (또는 /etc/cron.d의 crontab 프래그먼트)이있는 경우에 유용합니다. 루트 사서함이나 루트 전달 주소를 스팸으로 보내는 것을 피할 수 있습니다.