cron 작업 결과를 어떻게 볼 수 있습니까? 가이드가 있지만

crontab을 실행하는 방법에 대한 많은 가이드가 있지만 지금 필요한 것은 방법을 배우는 것입니다.

  1. 크론 작업에 대한 로그 파일 찾기
  2. 기록 할 항목 구성


답변

cron으로 실행하는 프로그램에 자체 로그 파일이 있는지 확인하십시오. 그들이 출력을 표준 출력에 쓰지 않으면 파일로 리디렉션하거나 메일로 보낼 수 있습니다. 내부 crontabs 표준 셸 리디렉션이 작동합니다.

예를 들면의 오류 출력 재 지정하기 some_job.shsome_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


답변

내가 작업 한 플랫폼의 대부분의 크론 데몬은 사용자 크론 작업의 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”를 정의해야합니다.


답변

cron이 실행하는 작업은 자체 로깅을 담당합니다.


답변

가장 간단한 방법은 인쇄 오류를 캡처 한 다음 파일로 저장하는 것입니다. 다음과 같이 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에 입력하면 이메일을 받게됩니다. 물론 계정에 대해 전자 메일을 구성해야합니다.


답변