답변:
cron으로 실행하는 프로그램에 자체 로그 파일이 있는지 확인하십시오. 그들이 출력을 표준 출력에 쓰지 않으면 파일로 리디렉션하거나 메일로 보낼 수 있습니다. 내부 crontabs 표준 셸 리디렉션이 작동합니다.
예를 들면의 오류 출력 재 지정하기 some_job.sh
로 some_job.err
하고 (즉,로 전송 표준 출력을 폐기 /dev/null
당신의 crontab에 다음 리디렉션을 추가하십시오)
33 3 * * * /path/to/some_job.sh 1> /dev/null 2> /other/path/to/some_job.err
또는 대신 우편으로 보내십시오 ( mail
가능한 경우 )
33 3 * * * /path/to/some_job.sh 1> /dev/null 2>&1 | mail -s "cron output" you@example.org
/dev/null
않습니까?
some_job.sh
stdout에서 /dev/null
stderr 이후로만 stdout (지금은 더 이상 아무것도 포함하지 않음)으로 모든 것을 리디렉션 합니다. 그렇게하면 stderr 만 stdout으로 끝나고에 전달됩니다 mail
.
내가 작업 한 플랫폼의 대부분의 크론 데몬은 사용자 크론 작업의 stdout / stderr을 crontab 작업을 보낸 사용자에게 자동으로 전자 메일로 보냅니다. 시스템 전체에서 발생하는 일을 잊어 버렸습니다 (/ etc / crontab의 사용자가 아닌 cron 작업). 사람들은 더 이상 대부분의 유닉스 계열 OS에서 메일러 데몬 (즉, sendmail, qmail 또는 postfix와 같은 MTA (Mail Transfer Agent))을 더 이상 설정하지는 않습니다. 따라서 cron 작업 출력 이메일 은 멀리까지 도착하면 로컬 메일 스풀 폴더에서 죽습니다 . 따라서 메일러 데몬을 시작하고 ~ / .forward 파일이 있어야 로컬 메일을 "실제"전자 메일 계정으로 전달할 수 있습니다.
작업을 특정 로그 파일에 쓰려면 @honk 제안과 같은 표준 출력 리디렉션을 사용하거나 cron 작업이 쉘 스크립트라고 가정하면 스크립트 호출을 logger (1) 또는 syslog (1) 또는 OS가 임의의 메시지를 syslog에 보내기 위해 제공하는 다른 명령 줄 도구 그런 다음 OS의 기본 제공 방법을 사용하여 /etc/syslog.conf를 편집하여 어디에 어떤 종류의 메시지를 기록할지 구성 할 수 있습니다.
내 cron 작업의 대부분은 특정 이유로 cron에서 시작하기 위해 특별히 작성한 bash 스크립트를 호출합니다. 그것들에서, 특히 처음에 그것들을 쓰고 디버깅 할 때, 나는 bash의 "set -vx"를 사용하여 쉘 스크립트의 각 줄의 확장되지 않은 확장 형태가 실행되기 전에 stdout에 기록되도록하고 싶습니다. cron에서 시작된 쉘 스크립트는 비 로그인, 비 대화식 쉘로 간주되므로 .bashrc 및 .profile과 같은 표준 쉘 시작 스크립트는 실행되지 않습니다. bash를 사용하고 bash에서 시작 스크립트를 실행하려면 작업을 정의하는 행 앞에 crontab에서 환경 변수 "BASH_ENV = / path / to / my / startup / script"를 정의해야합니다.
mail
명령을 사용 하여 명령 행에서 메시지를 읽을 수 있습니다 . 또는을보십시오 /var/spool/mail
. 그러나 표준 sendmail 이외의 postfix 또는 다른 메일러를 설치 한 경우 메시지를 읽는 다른 방법이 필요합니다.
mail -s "cron output" test@example.com
잘 작동 : /
less $MAIL
하면 현재 사용자 또는 크론 출력을보고 싶다면 less /var/spool/mail/root
당신이 루트로 실행 명령에 대한 크론 출력을보고 싶다면.
가장 간단한 방법은 인쇄 오류를 캡처 한 다음 파일로 저장하는 것입니다. 다음과 같이 PHP 명령 줄을 호출하는 cronjob이 있습니다.
1 0 * * * php /pathOfMyApp/index.php controllerName functionName> / pathOfMyApp / log / myErrorLog 2> & 1
'>'앞의 부분은 내 cronjob이고 '>'뒤의 부분은 캡처하여 프로젝트 루트의 로그 폴더에있는 파일에 저장하지만 원하는 곳에있을 수 있습니다. cronjob이 호출 될 때마다 마지막 로그를 덮어 씁니다. '>>'를 사용하여 기존 파일의 끝에 쓰거나 'cat'터미널 명령을 검색 할 수 있습니다.
crontab에서 'curl'또는 'wget'을 사용하고 링크를 참조하는 경우, cron이 500 또는 400으로 리턴되는 경우 / var / log / httpd / appName에서 액세스 로그를 검색 할 수 있습니다.
마지막으로 / var / log / messages도 확인할 수 있습니다.
이 경우 cron 파일 내에서 리디렉션하는 것이 최선의 옵션이 아닐 수도 있습니다.
로깅 speification을 cron 작업 스크립트와 함께 배치하려는 경우가 종종 있습니다. 이 경우 다음을 제안합니다.
#!/bin/bash
exec &>> capture-log.txt
echo "Running cron-job foo at $(date)"
...
<rest of script>
그러면 cron 작업의 출력이 capture-log.txt 파일에 추가됩니다.
크론 작업에 대한 전자 메일 보고서를받는 것을 선호합니다. 그냥 넣어
MAILTO=yourmail@domain.com
crontab에 입력하면 이메일을 받게됩니다. 물론 계정에 대해 전자 메일을 구성해야합니다.