Zatrzymanie / przeładowanie nginx w systemie Windows nie powiodło się, odmowa dostępu

13

Używam nginx na Windows Server 2008 R2 (x64) jako usługa Windows. Używam do tego opakowania usługi Windows. (Właściwie wykonałem ten samouczek: http://mercurial.selenic.com/wiki/HgServeNginxWindows .)

Usługa działa poprawnie. Jednak serwer nie przetwarza sygnałów (np. Zatrzymaj / przeładuj).

Oznacza to, że jeśli zatrzymam usługę, nginx nie zostanie zatrzymany. (Muszę to zabić.)

A kiedy chcę ponownie załadować konfigurację z wiersza poleceń:

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

Wyprowadza:

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

Uruchamiam polecenie jako administrator, a usługa jest uruchomiona w ramach usługi NETWORK SERVICE.

Wszelkie wskazówki lub podobne problemy?

TN.
źródło
Śledzenie ProcMon powinno być w stanie pomóc zidentyfikować problem. Jeśli możesz pobrać aplikację Process Monitor , uruchom ją, rozpocznij śledzenie, powtórz kroki, które wykonałeś wcześniej (aby odtworzyć błąd odmowy dostępu ), zatrzymaj śledzenie, zapisz go jako plik PML ( Wszystkie zdarzenia ) i udostępnij plik z nami możemy zapewnić rozwiązanie.
Tomas Dabasinskas

Odpowiedzi:

2

Musisz uruchomić reloadz tego samego konta co usługa. Na przykład, jeśli uruchamiasz nginx jako SYSTEM, możesz użyć psexecnarzędzia:

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

Jarosław Siwakow
źródło
1

Uruchamiam moją usługę nginx w systemie LOCAL SYSTEM i używam następującej konfiguracji xml:

<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>

Używam Windows Service Wrapper 1.18 i ta konfiguracja działa dla mnie. Procesy Nginx należy teraz zatrzymać z wdziękiem. Powodzenia.

ssanchezz23
źródło
gdzie znaleźć ten xml? Kontekst jest ważny!
Roel,
0

aby to działało dla mnie na Windows 10 z nginx 1.9.15, musiałem dodać

-p c:\nginx 

w argumentach stop

<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
źródło
0
  1. Otwórz cmdjako administrator .
  2. Następnie cdprzejdź do folderu, w którym znajduje się nginx, a następnie uruchom polecenia:

cmd (jako administrator)

cd E:\apath\nginx\nginx.exe
nginx -s reload
Kent Pawar
źródło