2011-01-17 16 views
8

मेरे पास एक PHP स्क्रिप्ट है जो आने वाले सॉकेट अनुरोधों आदि के लिए सुनती है। मुझे इस स्क्रिप्ट को लगातार चलने की आवश्यकता है (यह एक अनंत लूप के भीतर चलता है) सर्वर पर।एक सतत PHP स्क्रिप्ट कैसे चलाना है?

मैं इस प्रक्रिया को कैसे शुरू और प्रबंधित कर सकता हूं? मैंने इसे एसएसएच/पुट्टी के माध्यम से शुरू करने की कोशिश की लेकिन जैसे ही एसएसएच कनेक्शन समय स्क्रिप्ट से मर जाता है।

+4

[डेमॉन प्रक्रिया के रूप में चलाने के लिए PHP स्क्रिप्ट] के संभावित डुप्लिकेट (http://stackoverflow.com/questions/2036654/run-php-script-as-daemon-process) अच्छा जानकारी के –

+2

बहुत सारे: http: // stackoverflow .com/खोज?q = php + daemon –

+1

एसएसएच से अपने सत्र को अलग करने के लिए "स्क्रीन" उपयोगिता को जांचें (और यदि आप चाहें तो इसे फिर से कनेक्ट करें) – regilero

उत्तर

6
myscript.php & 

इस पृष्ठभूमि

scriptin आप के साथ

ps aux | grep myscript.php 

Patrick के रूप में नीचे टिप्पणी में उल्लेख किया गया है यह जांच कर सकते हैं चलेंगे, वहाँ कोई अधिकतम निष्पादन समय है PHP स्क्रिप्ट के लिए से चलाने कमांड लाइन। myscript.php अनिश्चित काल तक चलाएगा।

+0

आप इसे 'set_time_limit' के साथ ओवरराइड कर सकते हैं। –

+4

कमांड लाइन – Patrick

+0

@Patrick से चलाने के लिए कोई समय सीमा नहीं है! – ActionOwl

2

SSH के माध्यम से पृष्ठभूमि में स्क्रिप्ट चलाएं यहां बताए गए: Getting ssh to execute a command in the background on target machine

मैं करूंगा तो सुझाव है कि आप अगर स्क्रिप्ट अभी भी चल रहा है पर नजर रखने के लिए एक रास्ता है। आपने पोर्ट पर अपनी स्क्रिप्ट सुनवाई का उल्लेख किया है, तो आप शायद एक स्क्रिप्ट लिख सकते हैं जो पोर्ट को अभी भी खुला है या नहीं, यह देखने के लिए हर बार एक बार जांचता है।

एक और विकल्प प्रक्रिया आईडी की निगरानी करना है। जब स्क्रिप्ट पहले निष्पादित होती है, तो आप getmypid फ़ंक्शन का उपयोग करके प्रक्रिया आईडी को पकड़ सकते हैं और उसे फ़ाइल में संग्रहीत कर सकते हैं। फिर आप समय-समय पर जांच कर सकते हैं कि यह अभी भी ps -p 1234 का उपयोग कर चल रहा है या नहीं।

एक अन्य समाधान: How to check if a php script is still running

-1

नहीं क्यों एक करते हैं, जबकि पाश? do { /* your code */ } while $something == 0;

फिर जब कुछ स्क्रिप्ट के पड़ाव को गति प्रदान करने के लिए होता, 0.

+1

मेरा मानना ​​है कि ' $ कुछ = 0; 'एक असाइनमेंट है और सत्य/झूठा परीक्षण नहीं है ..;) लेकिन मुझे यकीन है कि आप उसे जानते हैं .. एक और बात यह है कि यदि आप लूप परिदृश्य पर कुछ भी आधार रखते हैं, तब तक जब तक आपका तर्क (स्क्रिप्ट/फ़ंक्शन ... जो भी हो) कुछ पर अवरुद्ध - किसी भी लूप 'निष्क्रिय' के दौरान बिल्कुल निष्क्रिय नहीं होगा, लेकिन सर्वर सीपीयू को सर्वर-व्यापी या कम से कम वर्चुअल सर्वर-व्यापी दायरे पर बहुमूल्य संसाधनों को बर्बाद कर रहा है। – Tore

0

के अलावा अन्य एक मूल्य आप इसे कमांड लाइन से चला सकते हैं करने के लिए $ कुछ निर्धारित किया है। इसे बनाने के लिए आपको "पृष्ठभूमि में चलाएं" संशोधक जोड़ना होगा ताकि सिस्टम स्क्रिप्ट को पूरा करने की प्रतीक्षा न करे। मूल रूप से आप अपनी कमांड लाइन के अंत में & डालते हैं।

एक चीज जो आपको निश्चित रूप से करना चाहिए वह एक आईएनआई शैल स्क्रिप्ट तैयार करता है जो किसी भी पुनरारंभ के बूटअप पर PHP स्क्रिप्ट चलाता है।

1

का उपयोग हमने हाल ही में एक ऐसी ही जरूरत थी ब्राउज़र का उपयोग कर सकते हैं। हम उबंटू 14.04 एलटीएस सर्वर चला रहे हैं, इसलिए बूट पर प्रक्रिया शुरू करने के लिए upstart प्रक्रिया बनाई गई है और अगर यह किसी भी कारण से निकलती है तो पुनरारंभ होता है।

यह स्वचालित पुनरारंभ सहित हमारे लिए बहुत अच्छा काम करता है; हमारी लंबी चलती प्रक्रिया अंततः MySQL कनेक्शन खो देता है। upstart प्रक्रिया से पहले स्वचालित रूप से प्रक्रिया को पुनरारंभ करने से पहले स्क्रिप्ट अपवाद और निकास को संभालती है। हमने प्रक्रिया की निगरानी के लिए cron स्क्रिप्ट भी जोड़ा है, अगर upstart एक बड़ी त्रुटि है तो पुनरारंभ करने का प्रयास छोड़ देता है; इस घटना में हमारे पास असफल-सुरक्षित है, एक सामान्य पुनरारंभ पूर्व त्रुटि को सही नहीं करता है।

+0

यह मेरी पहली पसंद भी होगी। – musicliftsme

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