29 분 동안 실행 후 PHP cron 작업이 실패했습니다. 로그의 오류 (/var/log/php_errors.log
)입니다 :최대 실행 시간 치명적인 오류로 인해 PHP cron 작업이 조기 종료 됨
[01-Mar-2012 00:32:57 UTC] PHP Fatal error: Maximum execution time of 60 seconds exceeded in /path/file.php on line 2079
크론를 트리거하는 crontab을 항목은 다음과 같습니다
00 00 * * * /usr/bin/php /path/file.php
내 연구 나는이가 max_execution_time
구성 설정 때문에 관련이 생각하지 않는다에서 :
- 실제로 나는 그것이 29:18 분 (즉, 오류 메시지와 비슷한 60 분 이상) 동안 실행되었다는 것을 알고 있습니다. 왜 스크립트가 조기 종료됩니다 : - the PHP docs에서
- 명령 줄에서 PHP를 실행하는 경우 기본 설정은 0
Q는?
주 :
스크립트는 매우 무거운이며, DB 쿼리의 수천을 실행 않습니다,하지만 난 top
을 실행하고 CPU 부하가 높지 않았다.
오류 로그에서 라인이 mysql_query
호출입니다 :
$sql = "SELECT SUM(amount) FROM mytab WHERE mem = '$id' AND validto > '$now'";
$res = mysql_query($sql);
> php -v
PHP 5.3.10 (cli) (built: Feb 2 2012 17:34:38)
Copyright (c) 1997-2012 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2012 Zend Technologies
with Suhosin v0.9.33, Copyright (c) 2007-2012, by SektionEins GmbH
> cat /etc/redhat-release
Red Hat Enterprise Linux Server release 5.7 (Tikanga)
업데이트 - 스크립트가 실시간으로 29 분 동안 실행할 수있는 이유가 발견하지만, PHP는 인용 실행 시간을 훨씬 더 낮출 수 있습니다.
때마다 시스템이 스크립트가 실행되어있는 최대 시간을 결정할 때 포함되지 않는 등 시스템(), 스트림 작업, 데이터베이스 쿼리를 사용하여 호출과 같은 스크립트의 실행 외부에서 발생하는 활동에 소요 .
(the set_time_limit() docs 에서뿐만 아니라 the max-execution-time docs에서 언급 됨). 대부분의 스크립트는 실행 시간을 클록 업하지 않은 db 쿼리와 지불 API 호출을 오랫동안 실행했기 때문에 이것은 저에게 의미가있었습니다.
cron 작업은 오류와 관련이 없습니다. 이것은 PHP의 순수한 문제입니다. 메모리 누수를 검사하고, 루프를 실행 한 후 일부 버그 배열의 설정을 해제하십시오. 쿼리 사이에 다른 큰 변수를 설정하십시오. –
또한 설명서에 다음과 같이 표시되어 있습니다. _ 최대 실행 시간은 시스템 호출, 스트림 작업 등의 영향을받지 않습니다. 사실 cron에 의해 실행 된 PHP _CLI_인지 확인할 수 있습니까? –
선택 속도를 높이기 위해 적합한 색인이 있는지도 확인합니다. *** mem *** 및 *** validto ***에 대한 색인이 있습니까? –