nginx stop / reload unter Windows fehlgeschlagen, da Access verweigert wird

11

Ich verwende nginx unter Windows Server 2008 R2 (x64) als Windows-Dienst. Ich benutze dafür Windows Service Wrapper. (Eigentlich habe ich dieses Tutorial befolgt: http://mercurial.selenic.com/wiki/HgServeNginxWindows .)

Der Dienst läuft in Ordnung. Der Server verarbeitet die Signale jedoch nicht (z. B. Stop / Reload).

Das heißt, wenn ich den Dienst beende, wird nginx nicht gestoppt. (Ich muss es töten.)

Und wenn ich die Konfiguration über die Befehlszeile neu laden möchte:

C:\Users\Administrator>E:\apath\nginx\nginx.exe -p E:\apath\nginx -c E:\apath\nginx.conf -s reload

Es gibt aus:

nginx: [error] OpenEvent("Global\ngx_reload_4268") failed (5: Access is denied)

Ich führe den Befehl als Administrator aus und der Dienst wird unter dem Benutzer NETWORK SERVICE ausgeführt.

Irgendwelche Hinweise oder ähnliche Probleme?

TN.
quelle
Ein ProcMon-Trace sollte in der Lage sein, das Problem zu identifizieren. Wenn Sie die Process Monitor- Anwendung herunterladen , ausführen, die Ablaufverfolgung starten, die zuvor ausgeführten Schritte wiederholen können (damit Sie den Fehler " Zugriff verweigert" reproduzieren ), die Ablaufverfolgung stoppen, als PML-Datei ( Alle Ereignisse ) speichern und die Datei freigeben können Mit uns können wir möglicherweise die Lösung anbieten.
Tomas Dabasinskas

Antworten:

1

Ich führe meinen Nginx-Service unter LOCAL SYSTEM aus und verwende folgende XML-Konfiguration:

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

Ich verwende Windows Service Wrapper 1.18 und diese Konfiguration funktioniert für mich. Nginx-Prozesse sollten jetzt ordnungsgemäß gestoppt werden. Viel Glück.

ssanchezz23
quelle
Wo finde ich diese XML? Der Kontext ist wichtig!
Roel
0

Ein paar Dinge zu versuchen:

  1. Warum im NETWORK SERVICE-Konto ausführen? Versuchen Sie es mit der Standardeinstellung für alle Dienste, LocalSystem.

  2. Folgen Sie diesem Tutorial, um einen anderen Wrapper, AlwaysUp, auszuprobieren . Wenn es funktioniert, liegt möglicherweise ein Problem mit Windows Service Wrapper vor.

Bitte melden Sie, was Sie finden.

CoreTech
quelle
0

Damit es unter Windows 10 mit Nginx 1.9.15 für mich funktioniert, musste ich hinzufügen

-p c:\nginx 

in den Stop-Argumenten

<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>
Steven Kohlmeyer
quelle
0

Sie müssen reloadvon demselben Konto wie der Dienst ausgeführt werden. Wenn Sie beispielsweise Ihren Nginx als SYSTEM ausführen, können Sie das folgende psexecTool verwenden:

PSEXEC -s c:\nginx\nginx.exe -p c:\nginx -s reload

Jaroslaw Sivakow
quelle
0
  1. cmdAls Administrator öffnen .
  2. cdGehen Sie dann zu dem Ordner, in dem sich nginx befindet, und führen Sie die folgenden Befehle aus:

cmd (als Administrator)

cd E:\apath\nginx\nginx.exe
nginx -s reload
Kent Pawar
quelle