it-swarm.com.de

führen Sie Nginx als Windows-Dienst aus

Ich versuche, Nginx (Reverse-Proxy) als Windows-Dienst auszuführen, sodass eine Anforderung auch dann ausgeführt werden kann, wenn ein Benutzer nicht verbunden ist.

Ich suchte viel herum und fand winsw , das einen Dienst aus einer .exe-Datei (wie nginx) erstellen sollte.

ich fand viele Tutorials online, die sagten, eine XML-Datei wie folgt zu erstellen

<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 c:\nginx</startargument>
   <stopargument>-p c:\nginx -s stop</stopargument>
</service>

(Ich habe nginx.exe in einem Ordner namens nginx unter c: o die Pfade sind korrekt).

Jetzt ist das Problem, dass der Dienst erstellt wurde, aber ich kann nicht scheinen, dass er gestartet wird. Jedes Mal, wenn ich versuche, den Dienst zu starten, wird ein Fenster angezeigt

Error 1053: The service didn't respond to the start or control request in a timely fashion

Weiß jemand, wie ich das beheben kann oder eine andere Möglichkeit, Nginx als Fensterservice auszuführen?

8
John Smith

Ich habe NSSM (der Non-Sucking Service Manager) gefunden: ein Programm, das genau das macht, was ich will, und es ist viel einfacher einzurichten.

2
John Smith

Ich bin einfach hier gestolpert und hat es geschafft, die Dinge mit dieser kostenlosen Open-Source-Alternative zum Laufen zu bringen: https://nssm.cc/

Es ist im Grunde nur eine grafische Benutzeroberfläche, die Sie bei der Erstellung eines Dienstes unterstützt. Schritte, die ich verwendet habe:

  1. Laden Sie NGinx ( http://nginx.org/de/download.html ) und uzip unter C:\foobar\nginx herunter
  2. Nssm herunterladen ( https://nssm.cc/ )
  3. Führen Sie "nssm install nginx" über die Befehlszeile aus
  4. In NSSM gui Folgendes tun:
  5. Legen Sie auf der Registerkarte der Anwendung den Pfad auf C:\foobar\nginx\nginx.exe fest, und legen Sie das Startverzeichnis auf C:\foorbar\nginx fest
  6. Geben Sie auf der Registerkarte "E/A" den Wert "Start Nginx" für die Eingabe langsam ein. Legen Sie optional C:\foobar\nginx\logs\service.out.log und C:\foobar\nginx\logs\service.err.log in den Ausgabe- und Fehler-Slots fest.
  7. Klicken Sie auf "Dienst installieren". Gehen Sie zu den Diensten und starten Sie "nginx". Drücken Sie http: // localhost: 80 und Sie sollten die Nginx-Anmeldung erhalten. Deaktivieren Sie den Dienst, deaktivieren Sie den Browser-Cache und aktualisieren Sie den Bildschirm. Der Bildschirm sollte jetzt nicht geladen werden. 

Sie sollten gut sein, von da an weiterzugehen.

21
Dave

Ich habe eine andere Lösung als NSSM gefunden. Das ist Windows Service Wrapper und die folgenden Anweisungen sind:

  1. Laden Sie die neueste Version von Windows Service Wrapper über github herunter.

    • Die aktuelle Version zum Zeitpunkt des Schreibens ist v2.1.2 (seit v2.x sind ausführbare Dateien für .NET 2.0 und .NET 4.0 verfügbar - andere nur auf Anfrage.)
  2. Benennen Sie winsw-xxxx.exe in etwas wie nginxservice.exe um.

    • Dies ist der Name, der für den Prozess angezeigt wird, dem der 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>

  • Aktuelle Informationen zur Konfiguration finden Sie auf der config GitHub-Seite und ein allgemeines Beispiel mit allen möglichen Optionen hier .

    1. Führen Sie den Befehl nginxservice.exe install ..__ aus.
      • Sie haben jetzt einen Nginx-Dienst in Ihren Diensten! (Es ist 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).)

Die obige Antwort wurde einem Post entnommen.

2
Sam G

Wie in anderen Antworten gesagt, ist NSSM 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 dieser 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 this answer beschrieben ein, um sie unbegrenzt auszuführen.
  • Vergessen Sie nicht, diese Aufgabe als höchstes Privileg mit dem Systemkonto auszuführen. Weitere Details finden Sie 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 zu vermeiden, dass mehrere nginx.exe-Instanzen erstellt werden.
  • 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.
1
Soumendra

Sie werden dies für Winsw brauchen

   <service>
        <id>nginx</id>
        <name>nginx</name>
        <description>nginx</description>
        <executable>c:\...\nginx.exe</executable>
        <logpath>...</logpath>
        <logmode>roll</logmode>
        <stopexecutable>c:\nginx\nginx-1.14.0\nginx.exe</stopexecutable>
        <stopargument>-s</stopargument>
        <stopargument>stop</stopargument>
    </service>

Sie benötigen einen <executable>, vorausgesetzt, Sie verwenden die Datei nginx.conf. Daher benötigen Sie keine Startargumente und auch <stopexecutable> und <stopargument>s (zum Emulieren von nginx -s stop)

0
tmjee