के कारण PHP क्रॉन नौकरी समयपूर्व समाप्ति मेरे पास एक PHP क्रॉन नौकरी है जो 2 9 मिनट के लिए चलने के बाद विफल हो रही है। लॉग में त्रुटि (/var/log/php_errors.log
) है:अधिकतम निष्पादन समय घातक त्रुटि
[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
config सेटिंग क्योंकि से संबंधित है :
- मुझे पता है कि यह 2 9:18 मिनट (यानि त्रुटि संदेश की तरह 60 से अधिक) के लिए चला गया है। क्यों स्क्रिप्ट जल्दी समाप्त किया जाता है: -
- the PHP docs से जब कमांड लाइन से पीएचपी चल डिफ़ॉल्ट सेटिंग 0.
क्यू है?
नोट्स:
स्क्रिप्ट बहुत भारी है, और डीबी प्रश्नों के कई हजारों चलती है, लेकिन मैं top
चल रहा था और सीपीयू लोड अधिक नहीं थी।
त्रुटि लॉग से लाइन एक 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 मिनट के लिए चला सकते हैं लेकिन पीएचपी निष्पादन समय बहुत कम उद्धरण से बाहर निकल सकता है।
स्क्रिप्ट के निष्पादन के बाहर होने वाली गतिविधि पर खर्च किए गए किसी भी समय सिस्टम(), स्ट्रीम ऑपरेशंस, डेटाबेस क्वेरी आदि का उपयोग करके सिस्टम कॉल जैसे स्क्रिप्ट को चलाने का अधिकतम समय निर्धारित करते समय शामिल नहीं किया जाता है ।
(the set_time_limit() docs से, लेकिन the max-execution-time docs में भी उल्लेख किया गया है)। यह मेरे लिए प्रासंगिक था क्योंकि अधिकांश स्क्रिप्ट लंबे समय से डीबी क्वेरी और भुगतान एपीआई कॉल चल रही थी जो निष्पादन समय को घड़ी नहीं दे रही थी।
क्रॉन नौकरी के पास आपकी त्रुटि से कोई लेना देना नहीं है, यह एक शुद्ध PHP मुद्दा है। मेमोरी लीक की जांच करें, लूप निष्पादित करने के बाद कुछ बग एरे को अनसेट करने का प्रयास करें। प्रश्नों के बीच मुफ्त अन्य बड़े चर सेट करें। –
आप दस्तावेज़ में भी नोटिस करेंगे जो यह कहता है: _ अधिकतम निष्पादन समय सिस्टम कॉल, स्ट्रीम ऑपरेशंस इत्यादि से प्रभावित नहीं होता है। क्या आप यह सुनिश्चित कर सकते हैं कि यह वास्तव में PHP _CLI_ है जिसे क्रॉन द्वारा निकाल दिया गया है? –
मैं यह भी जांचूंगा कि आपके पास चयन को तेज़ करने के लिए उपयुक्त अनुक्रमणिका हैं। क्या आपको *** mem *** और *** validto *** पर एक अनुक्रमणिका मिली है? –