सवाल विंडोज सिस्टम सेवा (जैसे अपाचे) के रूप में nginx.exe जोड़ें?


मैंने स्थिर सामग्री के लिए एनजीआईएनएक्स को फ्रंट एंड सर्वर के रूप में स्थापित किया है और मैं अपाचे को अन्य चीज़ों के लिए बैक-एंड सर्वर के रूप में उपयोग करता हूं।

बात यह है कि मुझे एक तार्किक उत्तर नहीं मिल रहा है जो मुझे बनाने की अनुमति देता है nginx.exe एक विंडोज सिस्टम सेवा (मेरे अपाचे की तरह)।

किसी के जवाब में कोई आ गया है?


44
2018-04-08 07:34


मूल


misterdai.wordpress.com/2009/10/16/nginx-windows-service - Burhan Khalid
प्रश्न से संबंधित है एस एफ - Shiplu Mokaddim


जवाब:


इसके साथ कैसे करें विंडोज सर्विस रैपर

(नोट: अब तक आशाजनक विकल्प हैं - नीचे दिए गए उत्तर में वर्णित एनएसएसएम समाधान भी देखें से Adamy।)

  1. का नवीनतम संस्करण डाउनलोड करें विंडोज सर्विस रैपर के जरिए GitHub या nuget
    • इस लेखन के रूप में वर्तमान संस्करण है v2.1.2
    • चूंकि .NET2.0 और .NET4.0 के लिए v2.x निष्पादन योग्य उपलब्ध हैं - अन्य केवल मांग पर हैं।
  2. नाम बदलें winsw-1.xx-bin.exe कुछ पसंद है nginxservice.exe
    • यह वह नाम है जो उस प्रक्रिया के लिए दिखाई देगा जो आपकी nginx प्रक्रिया का मालिक है।
  3. एक्सई के बगल में एक एक्सएमएल फ़ाइल को उसी बेस नाम के साथ रखें, उदा। nginxservice.xml। सामग्री नीचे की तरह होनी चाहिए (अपना nginx स्थान सत्यापित करें)।

    <service>
      <id>nginx</id>
      <name>nginx</name>
      <description>nginx</description>
      <executable>c:\nginx\nginx.exe</executable>
      <logpath>c:\nginx\</logpath>
      <logmode>roll</logmode>
      <depend></depend>
      <startargument>-p</startargument>
      <startargument>c:\nginx</startargument>
      <stopexecutable>c:\nginx\nginx.exe</stopexecutable>
      <stopargument>-p</stopargument>
      <stopargument>c:\nginx</stopargument>
      <stopargument>-s</stopargument>
      <stopargument>stop</stopargument>
    </service>
    
  4. आदेश चलाएं nginxservice.exe install

अब आपके पास एक होगा nginx आपकी सेवाओं में सेवा! (यह बूट पर स्वचालित रूप से प्रारंभ होने के लिए सेट है; यदि आप अपना सर्वर शुरू करना चाहते हैं, तो आपको मैन्युअल रूप से सेवा शुरू करनी होगी (net start nginx)।)


विंडोज सेवा के रूप में nginx को सही तरीके से स्थापित करने का विस्तृत विवरण: http://web.archive.org/web/20150819035021/http://misterdai.yougeezer.co.uk/posts/2009/10/16/nginx-windows-service/

अतिरिक्त ब्लॉग पोस्ट में निहित अतिरिक्त जानकारी नहीं है:

आप इस मेवेन रिपोजिटरी के माध्यम से विंडोज सर्विस रैपर का नवीनतम संस्करण भी पा सकते हैं: http://repo.jenkins-ci.org

उदाहरण:

<dependency>
    <groupId>com.sun.winsw</groupId>
    <artifactId>winsw</artifactId>
    <version>2.1.2</version>
    <classifier>bin</classifier>
    <packaging>exe</packaging>
</dependency>

<repository>
    <id>jenkinsci</id>
    <name>jenkinsci-releases</name>
    <url>http://repo.jenkins-ci.org/releases</url>
</repository>

68
2017-12-14 08:56



नोट, एक नया प्रतीत होता है WinSW के लिए रेपो साथ में नई बाइनरी उपलब्ध। - Phrogz
@Phrogz अद्यतन करने के लिए धन्यवाद। - Jörg
ध्यान दें कि टूर को 2 स्टॉप तर्क (1.18 में परीक्षण किया गया) डालना होगा: <stopargument> -s </ stopargument> <stopargument> stop </ stopargument> - c-toesca
Nginxservice.xml में मुझे स्पेस कैरेक्टर को बाद में लोड करने के लिए सही ढंग से लोड करने की आवश्यकता है। <Startargument> -पीसी: \ nginx </ startargument>। 1.8.0 और 1.9.5 पर कोशिश की - Gerard Sexton
मैंने एक्सएमएल को अपडेट किया, क्योंकि nginx प्रक्रियाओं को रोका नहीं गया था और मुझे उन्हें मैन्युअल रूप से मारना पड़ा taskkill /F /IM nginx.exe। विंडोज सर्विस रैपर लॉग्स ने कहा कि मैं stopexecutable xml विन्यास गायब था। इसलिए मैंने रुकने वाले तर्क टैग को हटा दिया और इसे इसके द्वारा प्रतिस्थापित किया:<stopexecutable>c:\nginx\nginx.exe</stopexecutable> <stopargument>-s</stopargument> <stopargument>stop</stopargument> - ssanchezz23


एनएसएसएम फॉर्म डाउनलोड करें http://nssm.cc/download । "रन% NSSM_HOME% \ nssm.exe" Nginx "इंस्टॉल करें"

NSSM संवाद में Nginx निष्पादन योग्य का चयन करें, फिर ठीक है। सेवाओं पर जाएं और नई बनाई गई सेवा "Nginx" शुरू करें, किया गया।


40
2018-02-19 01:51



Winsw के साथ ऐसा करने की कोशिश करने पर कुछ घंटों खर्च करें (क्योंकि आप जानते हैं, उत्तर में अधिक अपवॉट हैं, इसलिए पहले इसे आजमाएं) और विफल होने के बाद इसे कुछ मिनटों में एनएसएसएम के साथ किया। बहुत धन्यवाद !! - Marius B
धन्यवाद, अगली बार मैं इसके बजाय आपके समाधान के साथ कोशिश करूंगा! टूल बहुत सरल दिखता है और इसका एक अच्छा नाम है ;-) - Jörg
महान समाधान! वर्कंक सही है! धन्यवाद! - Anton Mitsev
इस समाधान का नकारात्मक पक्ष यह है कि nginx कमांड लाइन कमांड, जैसे कि nginx.exe -s reload अब और काम नहीं करेगा: अगर आप कॉन्फ़िगरेशन बदलते हैं तो आपको सेवा को पुनरारंभ करना होगा। वर्कअराउंड के रूप में मैंने पढ़ा है कि आपको व्यवस्थापक समूह में उपयोगकर्ता के रूप में nginx को चलाना होगा, इसलिए आपके उपयोगकर्ता, व्यवस्थापक समूह में भी आदेश चलाने में सक्षम होंगे। - firepol


एससी.एक्सईई केवल निष्पादन योग्य कार्यों के लिए काम करेगा जो पहले से ही विंडोज सेवा एपीआई का समर्थन करते हैं और सेवा नियंत्रण प्रबंधक (एससीएम) से अनुरोधों को शुरू और बंद करने के लिए सही ढंग से प्रतिक्रिया दे सकते हैं। अन्य नियमित अनुप्रयोग, विशेष रूप से सेवा के रूप में नहीं लिखे गए हैं, बस शुरू करने में असफल हो जाएंगे (आमतौर पर त्रुटि 1053 के साथ) ...

उन exe के लिए, आपको एक "सेवा रैपर" की आवश्यकता है - एक छोटी उपयोगिता जो एससीएम से स्टार्ट / स्टॉप कमांड स्वीकार कर सकती है और तदनुसार आपके आवेदन को चला / समाप्त कर सकती है। माइक्रोसॉफ्ट प्रदान करता है Srvany (जो अभी तक बहुत ही बुनियादी है), लेकिन कई अन्य मुफ्त और वाणिज्यिक विकल्प हैं।

बीटीडब्ल्यू, आपको यह देखना चाहिए एक सेवा के रूप में Nginix चलाने के लिए कैसे दिखाता है गाइड, विशेष रूप से चरण 7 जो चर्चा करता है कि कैसे Nginix को ठीक से रोकने के लिए। प्रत्येक रैपर उस कार्यक्षमता का समर्थन नहीं करेगा (Srvany नहीं करता है) ...


6
2017-10-18 21:53



SC.EXE will only work for executables that already support the Windows Services API मुझे विश्वास नहीं है कि यह कथन सही है, जब तक कि यह विंडोज के विशिष्ट संस्करण (ओं) से संबंधित न हो। मैंने गैर सेवा बाइनरी चलाने के लिए sc.exe का उपयोग किया है। उदाहरण के लिए यहां देखें - transistor1


आप उपयोग कर सकते हैं start.bat तथा stop.bat एक ही प्रभाव का एहसास करने के लिए।

start.bat

@ECHO OFF
REM Start Nginx
tasklist /FI "IMAGENAME eq nginx.exe" 2>NUL | find /I /N "nginx.exe">NUL
IF NOT "%ERRORLEVEL%"=="0" (
   REM Nginx is NOT running, so start it
   c:
   cd \nginx
   start nginx.exe
   ECHO Nginx started.
) else (
   ECHO Nginx is already running.
)

stop.bat

@ECHO OFF
REM Stop Nginx
tasklist /FI "IMAGENAME eq nginx.exe" 2>NUL | find /I /N "nginx.exe">NUL
IF "%ERRORLEVEL%"=="0" (
   REM Nginx is currently running, so quit it
   c:
   cd \nginx
   nginx.exe -s quit
   ECHO Nginx quit issued.
) else (
   ECHO Nginx is not currently running.
)

4
2017-10-01 02:28





मैंने पाया सबसे आसान तरीका, का उपयोग कर रहा था chocolatey पैकेज प्रबंधक।

एक बार चॉकलेट स्थापित हो जाने पर, आप एक व्यवस्थापकीय संकेत खोलते हैं और टाइप करते हैं:

choco install nginx

अब आपके पास 'nginx' नाम की एक विंडोज सेवा है।


4
2018-01-25 09:04



यह इस लेखन के रूप में nginx v1.6.2 स्थापित करेगा - Jörg
मुझे पता है कि यह पुराना है, लेकिन उपयोग करें choco install nginx बजाय - Manatax
जैसा कि अब हमारे पास जून 2017 है और nginx का चॉकलेट संस्करण अभी भी 1.6.2 है जो 16 सितंबर 2014 को जारी किया गया था, मैं इसे उत्पादन में उपयोग नहीं करता (यहां तक ​​कि डेबियन भी अद्यतित है!)। वैसे भी मुझे अपने देव मशीन पर एक वेबसर्वर के साथ अपने पैकर प्रावधान का परीक्षण करने का एक तेज़ तरीका चाहिए, इसलिए मैं इसके लिए जाऊंगा! - domih
यह जुलाई-2017 है और चॉकलेट nginx 1.12 स्थापित करेगा। - Shubham Patel


से ज़िप फ़ाइल डाउनलोड करें यहाँ

उद्धरण nginx-service.exe से winginx\build और इसे चलाओ।


1
2018-02-13 07:09





आधिकारिक nginx विकी पर रेफरी winginx इस उद्देश्य के लिए। यह लिनक्स पर्यावरण में exe-installer बनाता है। प्रक्रिया इस तरह दिखती है:

sudo apt-get install nsis make
wget https://github.com/InvGate/winginx/archive/master.zip
unzip master.zip
cd winginx-master/
make
ls -lh ./build/nginx-service.exe

वास्तविक संस्करण प्राप्त करने के लिए आपको उन्हें निर्दिष्ट करना चाहिए Makefile


1
2018-02-02 11:04



एफवाईआई: लिनक्स! = विंडोज़। - A.Grandt
@ एग्रैंड यह एक लिनक्स उपकरण है, जो विंडोज़ के लिए एक एक्सई इंस्टॉलर बनाता है। फिर आप इस इंस्टॉलर की प्रतिलिपि बनाते हैं, इसे अपने विंडोज सर्वर पर स्थापित करें और यह एक सेवा के रूप में चलता है। - user3132194


एक सेवा में nginx मोड़ने की बजाय, या एक प्रक्रिया शुरू करने के लिए सीएमडी का उपयोग करने के बजाय, जो वास्तव में काम नहीं लग रहा है। मैंने पाया कि पावरहेल एक अलग प्रक्रिया के रूप में nginx शुरू करना आसान बनाता है। मैंने PHP के साथ nginx शुरू कर दिया है। नीचे लिपि है, जिसका नाम "start-nginx.ps1" है

$fcgiPort = "127.0.0.1:9000"
$PHPini = "c:\php\php.ini"

$ErrorActionPreference = "SilentlyContinue"

function restart { 
Push-Location /nginx
Stop-Process -Force -Name nginx 
Start-Process ./nginx.exe   -WindowStyle Hidden 

Stop-Process -Force -Name php-cgi
Start-Process  "c:\php\php-cgi.exe" -ArgumentList ("-b" + $fcgiPort  +  " -c "  +  $PHPini)   -WindowStyle Hidden 
Pop-Location
}

restart

इस स्क्रिप्ट को किसी भी निर्देशिका से निष्पादित किया जा सकता है, लेकिन आपकी nginx स्थापना कहां स्थित है, इसके लिए अनुकूलित किया जाना चाहिए।

इस स्क्रिप्ट में दोनों लॉन्च करने से पहले nginx और PHP को मारने का एक मूक प्रयास शामिल है।

विंडोज सिस्टम को ".ps1" फ़ाइलों को पावरहेल के रूप में पहचानना है, यहां तक ​​कि सीएमडी प्रॉम्प्ट में भी।

मैंने चल रही प्रक्रियाओं को मारने के लिए एक और छोटी लिपि बनाई है, जो इस फ़ाइल से "स्टार्ट-प्रोसेस" लाइनों को हटा देता है।

स्टार्टअप पर चलाने के लिए, मैंने निर्देशिका खोल पर नेविगेट करने के लिए win-R कमांड का उपयोग किया: स्टार्टअप

इस निर्देशिका में स्टार्टअप स्क्रिप्ट के लिए शॉर्टकट रखना, nginx बूट पर शुरू होता है!

पावरहेल में कार्यों को शेड्यूल करने के लिए एक और अधिक परिष्कृत क्षमता भी शामिल है, और स्टार्टअप पर चलाने के लिए इस स्क्रिप्ट को शेड्यूल करना संभव है। यह लिंक देखें

लेख से:

 >powershell

 $trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30
 Register-ScheduledJob -Trigger $trigger -FilePath $HOME/start-nginx.ps1 -Name startNginx

संयुक्त, मुझे लगता है कि यह दृष्टिकोण आपको एक nginx विंडोज सेवा से आपको जो भी चाहिए, उसे प्राप्त करता है और किसी तीसरे पक्ष के अनुप्रयोगों की आवश्यकता नहीं होती है।


0
2017-11-26 16:25