nginx stop / reload en windows falló para acceso denegado

13

Estoy ejecutando nginx en Windows Server 2008 R2 (x64) como un servicio de Windows. Estoy usando Windows Service Wrapper para eso. (En realidad, he seguido este tutorial: http://mercurial.selenic.com/wiki/HgServeNginxWindows ).

El servicio funciona bien. Sin embargo, el servidor no procesa las señales (por ejemplo, detener / recargar).

Esto significa que si detengo el servicio, nginx no se detiene. (Tengo que matarlo).

Y cuando quiero volver a cargar la configuración desde la línea de comandos:

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

Produce:

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

Estoy ejecutando el comando como administrador y el servicio se ejecuta bajo el usuario del SERVICIO DE RED.

¿Alguna pista o problemas similares?

TENNESSE.
fuente
Un seguimiento de ProcMon debería poder ayudar a identificar el problema. Si pudiera descargar la aplicación Process Monitor , ejecútela, inicie el seguimiento, repita los pasos que realizó anteriormente (para reproducir el error de acceso denegado ), detenga el seguimiento, guárdelo como archivo PML ( Todos los eventos ) y comparta el archivo Con nosotros, podríamos ser capaces de proporcionar la solución.
Tomas Dabasinskas

Respuestas:

2

Debe ejecutar reloaddesde la misma cuenta que la ejecución del servicio. Por ejemplo, si ejecuta su nginx como SYSTEM, puede usar la psexecherramienta:

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

Yaroslav Sivakov
fuente
1

Ejecuto mi servicio nginx en SISTEMA LOCAL y uso la siguiente configuración 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>

Estoy usando Windows Service Wrapper 1.18 y esta configuración funciona para mí. Los procesos de Nginx deberían detenerse con gracia ahora. Buena suerte.

ssanchezz23
fuente
donde encontrar este xml? El contexto es importante!
Roel
0

Un par de cosas para probar:

  1. ¿Por qué ejecutarse en la cuenta de SERVICIO DE RED? Pruebe con el valor predeterminado para todos los servicios, LocalSystem.

  2. Siga este tutorial para probar otro contenedor, AlwaysUp . Si funciona, entonces puede estar enfrentando un problema con Windows Service Wrapper.

Por favor, informe lo que encuentre.

CoreTech
fuente
0

para que funcione para mí en Windows 10 con nginx 1.9.15 tuve que agregar

-p c:\nginx 

en los argumentos de parada

<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
fuente
0
  1. Abrir cmdcomo administrador .
  2. Luego cda la carpeta donde se encuentra nginx y luego ejecute los comandos:

cmd (como administrador)

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