crontab이 작동하는지 확인


82

특정 crontab이 제대로 작동하는지 확인하고 싶습니다. 나는 이런 직업을 추가했다 :

  */2 * * * * /path_to_my_php_script/info.php >/dev/null 2>&1

null 장치로 리디렉션하지만 위의 명령이 올바른지 확실하지 않습니다.

* 편집 1 : 내 / var / log / syslog에서 2 분마다 다음 오류가 발생합니다.

 (CRON) error (grandchild #2788 failed with exit status 2)

* 편집 2 :이 새로운 작업에서 로그에 오류가 없습니다 :

 */2 * * * * /usr/bin/php /path_to_my_php_script/info.php >/dev/null 2>&1

불행히도 위의 모든 시도했지만 나를 위해 작동하지 않습니다. 시험판 / bin / sh -c "(export PATH = / bin; /tmp/trial.sh </ dev / null)"은 / bin / sh가 무엇인지 확실하지 않은 메시지를 아래에 표시합니다. PATH = / bin :은 식별자가 아닙니다

답변:


73

crontab 항목의 구문이 올바르게 보입니다. 실제로 " crontab -e"를 사용하여 crontab을 편집 하면 구문 상 유효하지 않은 crontab 항목을 지정하면 오류가 발생합니다.

  1. 첫째, /path_to_my_php_script/info.php명령 줄에서 올바르게 실행됩니까?

  2. 그렇다면 다음과 같이 올바르게 실행됩니까?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
    
  3. 그것이 작동한다면, 이렇게 작동합니까?

    /bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null >/dev/null 2>&1)"
    

3 단계는 "man 5 cron"에 설명 된대로 cron이 프로그램을 실행하는 방법과 유사합니다.

가장 큰 문제는 PATH cron이 프로그램을 실행하는 데 사용하는 것이 너무 제한적이라는 것입니다. 따라서 crontab 항목의 맨 위에 다음과 같은 것을 추가 할 수 있습니다 (스크립트에 필요한 디렉토리를 추가해야 함).

PATH=~/bin:/usr/bin/:/bin

또한 cron은 기본적으로 /bin/shbash가 아닌을 사용 합니다. bash가 필요한 경우 crontab 파일의 시작 부분에 이것을 추가하십시오.

SHELL=/bin/bash

이러한 변경 사항은 모든 crontab 항목에 영향을 미칩니다 . info.php프로그램의 값을 수정 하려면 다음과 같이하십시오.

*/2 * * * * /bin/bash -c ". ~/.bashrc; /path_to_my_php_script/info.php"

또한 "메일"로 구성된 시스템 (즉, MTA가 [sendmail / postfix / etc]로 구성된 시스템)에서 crontab 프로그램의 모든 출력이 자동으로 이메일로 전송됩니다. 기본 우분투 데스크탑 시스템에는 로컬 메일이 구성되어 있지 않지만 서버에서 작업하는 경우 터미널에 "mail"을 입력하면 모든 cron 메일을 볼 수 있습니다. 이것은 " at"명령 에도 적용됩니다 .


2
2 단계에 대한 권한이 거부되었습니다. 어떻게해야합니까?
akikara

@akikara chmod + x ./cron.sh-분명히 파일의 위치가 ./cron.sh를 실행하려는 위치로 바꾸십시오
Tisch

46

매우 드물지만 때때로 서비스가 실행되고 있어도 cron이 제대로 작동하지 않습니다. crond가 실행 중인지 확인하고 서비스를 중지 / 시작하는 방법은 다음과 같습니다.

Linux에서 :

service crond status
service crond stop
service crond start

우분투 및 기타 데비안 기반 시스템에서 :

service cron status
service cron stop
service cron start

13
참고 사항 ... 우분투에게는 cron그렇지 않습니다crond
Amit Kohli

32

cron 출력을 위해 오류 출력을 / dev / null 및 grep / var / log / syslog로 리디렉션하지 마십시오.

grep cron /var/log/syslog

편집 후 /etc/crontab파일 또는 내부 파일을 저장할 때 즉시 오류를 표시 할 수 있습니다 /etc/cron.d/.

tail -f /var/log/syslog | grep --line-buffered cron

편집이 정상이면 RELOAD알림 만 표시되며 다음 과 같은 오류가 발생합니다.

Jul 9 09:39:01 vm cron[1129]: Error: bad day-of-month; while reading /etc/cron.d/new 

18

터미널 명령으로 활성 cron을 볼 수 있습니다.

crontab -l

다음은 순서대로 매개 변수입니다.

  1. 최소 (0-59)

  2. 시간 (0-23)

  3. 달의 날짜 (1-31)

  4. 월 (1-12)

  5. 요일 (0-6) (일요일 = 0)

  6. 명령

따라서 매시간 1 분마다 스크립트를 호출합니다. 테스트 목적으로 더 자주 간격을두고 출력을 테스트해야합니다.

* * * * * <command> #Runs every minute

이것은 매분마다 호출됩니다!


* / 2 * * * * 지금 2 분마다 변경되었습니다.
croppio.com


2

run-parts크론 작업을 대역 외에서 실행 하는데도 사용할 수 있다고 생각합니다 . 실제로 cron은 주기적 cron 작업을 실행하기 위해 자체적으로 사용하므로 적절한 인수를 제공하여 언제든지 실행할 수 있습니다.

/etc/cron.daily를 들어 정의 된 모든 크론 작업 대신 하나의 파일을 실행하려면 유효한 정규식과 함께 정규식 인수를 제공해야합니다.run-parts --list --regex '^p.*d$' /etc

크론 작업은 일반적으로 확장자없이 이름이 지정되고 실행 가능으로 표시되므로 정규식을 사용하면 확장자가있는 스크립트를 트리거 할 수 있지만 스크립트가 유사해야합니다.


1

아 !!

대답을 직접 얻었습니다. 확인하고 crond기본 설치 디렉토리 내부를 찾지 못했습니다./etc/init.d/

이제 답장을 시도합니다.

주의 - 나는를 확인 않았다 cron.allow, cron.deny너무. 지금까지는 괜찮습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.