2015-03-09 8 views
5

मुझे समस्या है कि एक php स्क्रिप्ट चलाने के लिए पर्यवेक्षक को कॉन्फ़िगर करने का प्रयास करें। रनिंग डिबग मोड में पर्यवेक्षक मुझे देता है यह:पर्यवेक्षक "बाहर निकलने की स्थिति 1 अपेक्षित नहीं" चल रहा है php स्क्रिप्ट

2015-03-09 08:53:06,342 INFO supervisord started with pid 2030 
2015-03-09 08:53:06,358 INFO spawned: 'worker1' with pid 2031 
2015-03-09 08:53:06,423 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:06,424 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:07,440 INFO spawned: 'worker1' with pid 2032 
2015-03-09 08:53:07,587 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:07,589 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:09,604 INFO spawned: 'worker1' with pid 2033 
2015-03-09 08:53:09,756 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:09,758 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:12,775 INFO spawned: 'worker1' with pid 2034 
2015-03-09 08:53:12,973 INFO exited: worker1 (exit status 1; not expected) 
2015-03-09 08:53:12,974 INFO received SIGCLD indicating a child quit 
2015-03-09 08:53:13,976 INFO gave up: worker1 entered FATAL state, too many start retries too quickly 

supervisord विन्यास:

[program:worker1] 
command=php myScript.php 
directory=/home/path/to/script/ 
user=root 
autostart=true 
autorestart=true 
stderr_logfile=/var/log/worker1.err.log 
stdout_logfile=/var/log/worker1.out.log 
redirect_stderr=true 
environment=PATH="/usr/bin" 

इस परीक्षण myScript.php के लिए सिर्फ बाहर echo "test".PHP_EOL;

कोई लॉग रिपोर्टिंग php से त्रुटियां नहीं हैं प्रिंट, और यदि मैं क्ली के माध्यम से स्क्रिप्ट चलाता हूं तो यह अपेक्षित काम करता है। पर्यवेक्षक लॉग सिर्फ डीबगजिन के समान आउटपुट की रिपोर्ट करता है।

मैंने /usr/bin/php /home/path/to/script/myScript.php जैसे पूर्ण पथों का उपयोग करने का भी प्रयास किया है लेकिन कुछ भी नहीं बदलेगा। myScript.php के लिए

फ़ाइल अनुमति -rwxrwxr-x 1 root apache

की तैयारी में हैं वास्तव में मैं और क्या जांच कर सकता है पता नहीं है। समर्थन के लिए धन्यवाद!

UPDATE_1

मैं भी तरह/bin/बिल्ली या एक bash स्क्रिप्ट अन्य कार्यक्रम पर नजर रखने की कोशिश की है और एक आकर्षण की तरह काम करता है। समस्या php तक सीमित प्रतीत होती है।

UPDATE_2

N.B. के रूप में टिप्पणियाँ मैं परीक्षण स्क्रिप्ट बदल दिया है और अधिक लंबे समय से चल नौकरी की तरह लग रहे करने के लिए कहा: पहले की तरह

while(true){ 
    echo "test".PHP_EOL; 
    sleep(10); 
} 

ही, यह घातक राज्य में प्रवेश करती है।

+0

आप "worker1.err.log" में कुछ भी नहीं कह रहे हैं? – MegaAppBear

+0

नहीं, कुछ भी नहीं। यह भी बनाया गया है ... – Luciano

+0

क्या आपने "कमांड" लाइन में स्क्रिप्ट के पूर्ण पथ की कोशिश की है? – MegaAppBear

उत्तर

8

निकास कोड 1 के साथ इस व्यवहार को पुन: उत्पन्न करने का एकमात्र तरीका फ़ाइल के अमान्य पथ का उपयोग करना है। तो सबसे पहले कृपया जांच करें कि पथ सही है या नहीं। लेकिन मुझे लगता है कि आपने पहले यह किया है।

मुझे लगता है कि फ़ाइल आपकी होम निर्देशिका के अंतर्गत स्थित है और रूट उपयोगकर्ता इसे एक्सेस करने और चलाने में सक्षम नहीं है। तो मैं स्क्रिप्ट के स्थान को बदलने की कोशिश करता हूं।

परीक्षण के लिए, आप /tmp/myScript.php के तहत अपनी स्क्रिप्ट जगह कर सकते हैं:

cp /home/path/to/script/myScript.php /tmp/myScript.php 

और इस तरह से अपनी supervisord config को संशोधित:

[program:worker1] 
command=php myScript.php 
directory=/tmp/ 
user=root 
autostart=true 
autorestart=true 
stderr_logfile=/var/log/worker1.err.log 
stdout_logfile=/var/log/worker1.out.log 
redirect_stderr=true 
environment=PATH="/usr/bin" 

अब supervisored अपनी स्क्रिप्ट चलाने में सक्षम होना चाहिए।

यदि यह काम कर रहा है, तो आपको यह जांचना चाहिए कि कौन सा फ़ोल्डर स्क्रिप्ट तक पहुंचने से रूट को रोकता है। यह एक encypted (और घुड़सवार) फ़ोल्डर (घर dir?) के कारण हो सकता है, या यदि स्थान अन्य जगह से घुड़सवार है (samba, nfs ...)। समस्या को हल करने के लिए आप उपयोगकर्ता को रूट से उपयोगकर्ता को बदलने की कोशिश कर सकते हैं (मैं इसकी अनुशंसा नहीं करता) या प्रोजेक्ट स्थान को किसी अन्य फ़ोल्डर में बदल सकता हूं, जो आपके घर के डीआईआर के नीचे स्थित नहीं है।

+0

आपका समाधान काम करता है, मैंने बस फ़ाइल को tmp निर्देशिका में ले जाया है! लेकिन अगर मैं अपने उपयोगकर्ता के साथ मूल स्थान के नीचे पर्यवेक्षक चलाता हूं, तो यह ' टी काम नहीं मैं घर फ़ोल्डर के बाहर स्क्रिप्ट को स्थानांतरित करने का प्रयास करने की कोशिश करूंगा ... मदद के लिए धन्यवाद! – Luciano

+0

यह बहुत उपयोगी था धन्यवाद! मैं एक बैश स्क्रिप्ट चलाने के लिए पर्यवेक्षक conf का उपयोग कर रहा था (पथ समस्याओं से बचने के लिए) और दोनों परिवर्तन उपयोगकर्ता और निर्देशिका बदलना गायब था –

0

मैं थोड़ी देर के लिए Supervisord का उपयोग कर किया गया है और यह है कि क्या मैं अपने config में है:

[program:worker1] 
command=php /absolute/path/to/myScript.php 

कारण मैं एक anwser के रूप में इस लिख रहा हूँ स्वरूपण के कारण है।

इसके अलावा, इस स्क्रिप्ट का प्रयास करें:

for(i = 0; i < 10; i++) 
{ 
    printf("\nIteration: %d", $i); 
    usleep(1000 * 200); // 200 milliseconds between each printf 
} 

exit; 

और पर्यवेक्षण में जोड़ें। इसके गूंजने के बाद इसे पुनरारंभ करना चाहिए।

+0

इस स्निपेट का प्रयास किया, वही व्यवहार जबकि (सत्य) लूप के लिए धन्यवाद। मदद! – Luciano

0

startsecs = 0 सेट करने का प्रयास:

[program:foo] 
command = ls 
startsecs = 0 
autorestart = false 
http://supervisord.org/configuration.html 

startsecs

सेकंड की कुल संख्या जो कार्यक्रम शुरू सफल विचार करने के लिए स्टार्टअप के बाद चल रहा रहने की जरूरत है। यदि कार्यक्रम शुरू होने के बाद कई सेकंड तक नहीं रहता है, भले ही यह "अपेक्षित" निकास कोड (एक्ज़िटकोड देखें) से बाहर निकल जाए, स्टार्टअप को विफलता माना जाएगा। यह इंगित करने के लिए 0 पर सेट करें कि प्रोग्राम को किसी विशेष समय के लिए चलने की आवश्यकता नहीं है।

संबंधित मुद्दे