특정 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
답변
crontab 항목의 구문이 올바르게 보입니다. 실제로 ” crontab -e
“를 사용하여 crontab을 편집 하면 구문 상 유효하지 않은 crontab 항목을 지정하면 오류가 발생합니다.
-
첫째,
/path_to_my_php_script/info.php
명령 줄에서 올바르게 실행됩니까? -
그렇다면 다음과 같이 올바르게 실행됩니까?
/bin/sh -c "(export PATH=/usr/bin:/bin; /path_to_my_php_script/info.php </dev/null)"
-
그것이 작동한다면, 이렇게 작동합니까?
/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/sh
bash가 아닌을 사용 합니다. 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
“명령 에도 적용됩니다 .
답변
매우 드물지만 때때로 서비스가 실행되고 있어도 cron이 제대로 작동하지 않습니다. crond가 실행 중인지 확인하고 서비스를 중지 / 시작하는 방법은 다음과 같습니다.
Linux에서 :
service crond status
service crond stop
service crond start
우분투 및 기타 데비안 기반 시스템에서 :
service cron status
service cron stop
service cron start
답변
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
답변
터미널 명령으로 활성 cron을 볼 수 있습니다.
crontab -l
다음은 순서대로 매개 변수입니다.
-
최소 (0-59)
-
시간 (0-23)
-
달의 날짜 (1-31)
-
월 (1-12)
-
요일 (0-6) (일요일 = 0)
-
명령
따라서 매시간 1 분마다 스크립트를 호출합니다. 테스트 목적으로 더 자주 간격을두고 출력을 테스트해야합니다.
* * * * * <command> #Runs every minute
이것은 매분마다 호출됩니다!
답변
각 줄의 시간 부분에 대해이 cron 테스터 를 사용하여 cron 시간 정의를 테스트 / 확인할 수 있습니다.
답변
run-parts
크론 작업을 대역 외에서 실행 하는데도 사용할 수 있다고 생각합니다 . 실제로 cron은 주기적 cron 작업을 실행하기 위해 자체적으로 사용하므로 적절한 인수를 제공하여 언제든지 실행할 수 있습니다.
예 /etc/cron.daily
를 들어 정의 된 모든 크론 작업 대신 하나의 파일을 실행하려면 유효한 정규식과 함께 정규식 인수를 제공해야합니다.run-parts --list --regex '^p.*d$' /etc
크론 작업은 일반적으로 확장자없이 이름이 지정되고 실행 가능으로 표시되므로 정규식을 사용하면 확장자가있는 스크립트를 트리거 할 수 있지만 스크립트가 유사해야합니다.
답변
아 !!
대답을 직접 얻었습니다. 확인하고 crond
기본 설치 디렉토리 내부를 찾지 못했습니다./etc/init.d/
이제 답장을 시도합니다.
주의 – 나는를 확인 않았다 cron.allow
, cron.deny
너무. 지금까지는 괜찮습니다.