2011-05-10 2 views
17

मुझे विंडोज़ सेवा के रूप में एक PHP स्क्रिप्ट स्थापित करने की आवश्यकता है।एक विंडोज स्क्रिप्ट के रूप में एक PHP स्क्रिप्ट सेट करना

मुझे यह सुनिश्चित करने की आवश्यकता है कि किस उपयोगकर्ता ने लॉग इन किया है, और सिस्टम शुरू होने पर - ऐसा लगता है कि विंडोज़ सेवा की तरह सबसे अच्छा है, लेकिन अन्य सुझावों को सुनकर मुझे खुशी है।

(यह स्क्रिप्ट निरंतर चलती रहती है यह मैं के लिए अनुसूचित कार्य प्रबंधक का उपयोग कर सकता है एक "हर 5 मिनट चलाने" बात नहीं है।)

http://support.microsoft.com/kb/251192 आपकी सेवा स्थापित करने के लिए Sc.exe प्रोग्राम का उपयोग को शामिल किया गया।

लेकिन जो मैंने पढ़ा है, उससे मुझे विंडोज सेवा प्रबंधक से विशेष आदेशों को स्वीकार करने के लिए PHP स्क्रिप्ट के चारों ओर एक रैपर होना चाहिए। क्या कोई इसके लिए सहायता कर सकता है?

उत्तर

12

शायद Resource Kit Tools (विशेष रूप से srvany.exe) आपकी मदद कर सकते हैं। एमएसडीएन: How To Create A User-Defined Service और संभवतः this hint for 2008 Server आपको किसी सेवा के रूप में निष्पादन योग्य सेट करने में मदद करनी चाहिए। (मैंने विंडोज 2003 सर्वर, विंडोज 2008 सर्वर और विंडोज एक्सपी प्रोफेशनल [अन्य संसाधन किट, हालांकि] पर इसका सफलतापूर्वक उपयोग किया है)

आप php your-script.php युक्त बल्ले बनायेंगे, srvany.exe और voila के साथ लपेटें, मशीन लोड होने के बाद स्क्रिप्ट शुरू हो जाती है।

srvany.exe उन कॉल को प्रारंभ/बंद/पुनरारंभ करना चाहिए जिन्हें आप निष्पादित करने की अपेक्षा करेंगे। यह आपके निष्पादन योग्य को लोड पर लोड करेगा, स्टॉप पर प्रक्रिया को मार देगा, दोनों को पुनरारंभ करने पर करें। तो आपको इस हिस्से के बारे में चिंता करने की ज़रूरत नहीं है। आप यह जांचना चाहेंगे कि register_shutdown_function() आपकी सेवा प्रक्रिया कब मारे जाने की पहचान करने में सहायता कर सकता है।

आप अन्य सेवाओं पर निर्भरता भी परिभाषित कर सकते हैं (कुछ डेटाबेस या कुछ ऐसे कहें)।

Windows Registry Editor Version 5.00 

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\THENAMEOFYOURSERVICE] 
"DependOnService"="DEPENDONTHIS" 

की जगह THENAMEOFYOURSERVICE नाम के साथ आप पर (कहते हैं कि "Postgres9.0" या कुछ और) निर्भर करने के लिए सेवा के नाम के साथ अपनी सेवा और DEPENDONTHIS दे दी है। उस फ़ाइल को dependency.reg पर सहेजें और इसे regedit /s dependency.reg से लोड करें। (या एक्सप्लोरर में इसे डबलक्लिक करें ...)

+0

हैलो - विस्तृत उत्तर के लिए धन्यवाद। मुझे वास्तव में ऐसा करने की आवश्यकता नहीं है, इसलिए इस समय परीक्षण न करें, लेकिन यह किसी और के प्रयास करने का सही मार्ग जैसा दिखता है। – James

+0

हालांकि यह काफी पुराना है, मैं बहुत पुराने srvany.exe के विकल्प को इंगित करना चाहता हूं (उदाहरण के लिए अंतर्निहित PHP स्क्रिप्ट को समाप्त करने पर प्रतिक्रिया नहीं होती है): एनएसएसएम (गैर चूसने वाला सर्वर मैनेजर) यह एक संगत प्रतिस्थापन है srvany.exe करने के लिए। दुर्भाग्यवश, https://nssm.cc – Peter

3

हमने इस कार्य के लिए FireDaemon का उपयोग किया, इसे रैपर स्क्रिप्ट आदि की आवश्यकता नहीं है। दुर्भाग्यवश यह फ्रीवेयर नहीं है।

2

आप विभिन्न पैरामीटर और स्क्रिप्ट-फ़ाइल को पैरामीटर के रूप में देकर कमांड लाइन पर php चला सकते हैं। यदि आप पूरी लाइन जोड़ते हैं तो आपको सेवा कॉन्फ़िगरेशन में आवश्यकता होती है, इसे चलाना चाहिए। तो आप सेवा बनाने से पहले डिवाइस को आजमाने में भी सक्षम हैं। यदि php-script आपके वेब-रूट के बाहर है तो आपको फ़ोल्डर को पैथ-वेरिएबल में जोड़ना चाहिए।

1

मुझे यह मिला लेकिन मैंने इसे स्वयं नहीं किया है। पीएचपी वास्तव में कुछ कार्यों के साथ आता है यह करने के लिए: http://uk.php.net/manual/en/win32service.examples.php

<?php 
if ($argv[1] == 'run') { 
    win32_start_service_ctrl_dispatcher('dummyphp'); 

    while (WIN32_SERVICE_CONTROL_STOP != win32_get_last_control_message()) { 
    # do your work here. 
    # try not to take up more than 30 seconds before going around the loop 
    # again 
    } 
} 
?> 
+0

देखें, यह एक असमर्थित पीईसीएल समाधान है। आपको खुद को .dll संकलित करना होगा। देखें: http://pecl.php.net/package/win32service –

0

कुछ दिनों के बाद ... मैं इस magnific विकल्प पाया: http://uk.php.net/manual/en/book.win32service.php

कुछ उदाहरण हैं!

वह एक .exe बनाता है जो सेवा विकल्पों को पुनः प्राप्त करता है और ठीक काम करता है!

https://superuser.com/questions/628176/php-cgi-exe-as-a-windows-service/643676#643676

आदेश सही:

अनुसूचित जाति बनाने FOO binPath = "service.exe \" C: \ 127.0.0.1:9000 -c बी php \ php-cgi.exe सी: \ php \ php.ini "\" टाइप = अपनी शुरुआत = ऑटो त्रुटि = DisplayName = "FOO php"

+0

ओपी ने पूछा, "मुझे विंडोज़ सेवा के रूप में एक PHP स्क्रिप्ट स्थापित करने की आवश्यकता है।" और आपने सर्वर के रूप में php को चलाने का तरीका बताया। दो अलग-अलग चीजें – machineaddict