it-swarm.com.de

Fügen Sie nginx.exe als Windows-Systemdienst hinzu (wie Apache)?

Ich habe NGINX als Front-End-Server für statische Inhalte eingerichtet und verwende Apache als Back-End-Server für andere Zwecke.

Die Sache ist, ich kann keine logische Antwort finden, die es mir erlaubt, nginx.exe einen Windows-Systemdienst (wie meinen Apache) zu machen.

Gibt es eine Antwort darauf?

50
user1305810

Vorgehensweise mit Windows Service Wrapper

(Anmerkung: Es gibt inzwischen vielversprechende Alternativen - siehe auch NSSM-Lösung, die unten in Antwort beschrieben wird from Adamy .)

  1. Laden Sie die neueste Version von Windows Service Wrapper über github oder nuget ..__ herunter.
    • Derzeitige Version ist v2.1.2}
    • Seit v2.x sind ausführbare Dateien für .NET2.0 und .NET4.0 verfügbar - andere nur auf Anfrage.
  2. Benennen Sie winsw-1.xx-bin.exe in etwas wie nginxservice.exe..__ um.
    • Dies ist der Name, der für den Prozess angezeigt wird, dem Ihr Nginx-Prozess gehört.
  3. Platzieren Sie eine XML-Datei neben dem Exe mit demselben Basisnamen, z. nginxservice.xml. Der Inhalt sollte wie folgt aussehen (überprüfen Sie Ihren Nginx-Standort).

    <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. Führen Sie den Befehl nginxservice.exe install aus.

Sie haben jetzt einen nginx-Dienst in Ihren Diensten! (Es wird so eingestellt, dass es beim Booten automatisch startet; wenn Sie Ihren Server starten möchten, müssen Sie den Dienst manuell starten (net start nginx).)


Detaillierte Beschreibung der korrekten Einrichtung von nginx als Windows-Dienst: http://web.archive.org/web/20150819035021/http://misterdai.yougeezer.co.uk/posts/2009/10/16/nginx-windows-service/

Zusätzliche Informationen, die nicht im obigen Blogbeitrag enthalten sind:

Sie können die neueste Version des Windows Service Wrapper auch über dieses Maven-Repository finden: http://repo.jenkins-ci.org

Beispiel:

<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>
72
Jörg

Laden Sie das NSSM-Formular herunter http://nssm.cc/download . "Führen Sie die% NSSM_HOME%\nssm.exe-Installation" Nginx "aus."

Wählen Sie im NSSM-Dialogfeld die ausführbare Nginx-Datei aus und klicken Sie auf OK. Gehen Sie zu Dienste und starten Sie den neu erstellten Dienst "Nginx".

43
Adamy

Sie können start.bat und stop.bat verwenden, um denselben Effekt zu erzielen.

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.
)
6
xgqfrms

SC.EXE funktioniert nur für ausführbare Dateien, die die Windows Services-API bereits unterstützen, und kann ordnungsgemäß auf Start und Stopp von Anforderungen vom Services Control Manager (SCM) reagieren. Andere reguläre Anwendungen, die nicht speziell als Dienst geschrieben wurden, können nicht gestartet werden (normalerweise mit Fehler 1053) ...

Für diese Benutzer benötigen Sie einen "Service Wrapper" - ein kleines Dienstprogramm, das die Start/Stopp-Befehle vom SCM akzeptiert und Ihre Anwendung entsprechend ausführen/beenden kann. Microsoft bietet Srvany (das zwar kostenlos ist, aber sehr einfach ist), es gibt jedoch mehrere andere freie und kommerzielle Alternativen.

Übrigens, Sie sollten diese Anleitung lesen, die zeigt, wie Nginix als Dienst ausgeführt wird , insbesondere in Schritt 7, in dem beschrieben wird, wie Sie Nginix ordnungsgemäß stoppen können. Nicht jeder Wrapper unterstützt diese Funktionalität (Srvany nicht) ...

6
CoreTech

Der einfachste Weg, den ich gefunden habe, war die Verwendung des Paketmanagers Chocolatey .

Sobald Chocolatey installiert ist, öffnen Sie eine administrative Aufforderung und geben Folgendes ein:

choco install nginx

Sie haben jetzt einen Windows-Dienst namens 'nginx' ausgeführt.

4
suneg

Offizielle nginx-Wiki verweist auf winginx für diesen Zweck. Es erstellt ein Exe-Installationsprogramm in einer Linux-Umgebung . Der Prozess sieht folgendermaßen aus:

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

Um aktuelle Versionen zu erhalten, sollten Sie sie in Makefile angeben.

1
user3132194

Zip-Datei von hier herunterladen.

Extrahieren Sie nginx-service.exe aus winginx\build und führen Sie es aus.

1
Dileepa

NSSM ist das beste Werkzeug, um Nginx als Dienst auszuführen.
Wenn Sie keine externe Drittanbieter-Software verwenden möchten, können Sie eine der beiden Methoden implementieren. 

  • Windows Taskplaner
  • Windows-Startverknüpfung

Windows Task Scheduler 

  • Wie in diese Antwort erwähnt bereiten Sie eine start.bat-Datei vor.
  • Legen Sie diese Datei dort ab, wo nginx.exe vorhanden ist.
  • Öffnen Sie den Windows-Taskplaner, und richten Sie die Task wie in diese Antwort beschrieben ein, um sie unbegrenzt auszuführen.
  • Vergessen Sie nicht, diese Aufgabe als höchstes Privileg mit dem Systemkonto auszuführen. Weitere Informationen finden Sie hier hier .
  • Stellen Sie den Task so ein, dass er täglich zu einem bestimmten Zeitpunkt startet. Durch die bat-Datei wird geprüft, ob der Dienst bereits ausgeführt wird, um die Erstellung mehrerer nginx.exe-Instanzen zu vermeiden.
  • Wenn Nginx aus irgendeinem Grund herunterfährt, wird es innerhalb von 5 Minuten gestartet.

Windows-Startverknüpfung 

  • Erstellen Sie eine Verknüpfung von nginx.exe und legen Sie sie im Startordner von Windows ab.

  • Folgen Sie dieser Antwort , um Ihren Startort zu finden. 

  • Nginx wird automatisch ausgeführt, wenn Sie sich am System anmelden. 
  • Dies ist das einfachste. Es ist jedoch abhängig vom Benutzerprofil, d. H. Wenn Sie Nginx auf einem Server ausführen, wird es nur für Ihr Benutzerkonto ausgeführt. Wenn Sie sich abmelden, wird es beendet.
  • Dies ist ideal für die Entwicklungsumgebung.
0
Soumendra

Anstatt nginx in einen Service zu verwandeln oder CMD zu verwenden, um einen Prozess zu starten, was wirklich nicht zu funktionieren scheint. Ich fand, dass Powershell es einfach macht, Nginx als Einzelprozess zu starten. Ich habe nginx mit PHP kombiniert. Unten ist das Skript namens "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

Dieses Skript kann von einem beliebigen Verzeichnis aus ausgeführt werden, muss jedoch an den Ort Ihrer Nginx-Installation angepasst werden. 

Dieses Skript enthält einen unbeaufsichtigten Versuch, Nginx und PHP zu beenden, bevor beide gestartet werden. 

Windows-Systeme sollen ".ps1" -Dateien auch in der CMD-Eingabeaufforderung als Powershell erkennen. 

Ich habe ein weiteres kleines Skript erstellt, um die laufenden Prozesse abzubrechen. Dabei werden einfach die "Startprozess" -Zeilen aus dieser Datei entfernt. 

Um beim Start zu starten, navigierte ich mit dem Befehl win-R zum Verzeichnis Shell: Start

Wenn Sie eine Verknüpfung zum Startskript in diesem Verzeichnis ablegen, startet nginx beim Booten!

Powershell bietet auch eine weitaus komplexere Möglichkeit zum Planen von Aufgaben. Es ist möglich, dieses Skript beim Start zu starten. Siehe diesen Link

Aus dem Artikel:

 >powershell

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

Ich denke, mit diesem Ansatz bekommen Sie alles, was Sie von einem nginx Windows-Dienst benötigen, und erfordert keine Anwendungen von Drittanbietern. 

0
sdw