échec de l'arrêt / rechargement de nginx sous Windows car l'accès est refusé

13

J'exécute nginx sur Windows Server 2008 R2 (x64) en tant que service Windows. J'utilise Windows Service Wrapper pour cela. (En fait, j'ai suivi ce tutoriel: http://mercurial.selenic.com/wiki/HgServeNginxWindows .)

Le service fonctionne bien. Cependant, le serveur ne traite pas les signaux (par exemple arrêt / rechargement).

Cela signifie que si j'arrête le service, nginx n'est pas arrêté. (Je dois le tuer.)

Et quand je veux recharger la configuration depuis la ligne de commande:

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

Il génère:

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

J'exécute la commande en tant qu'administrateur et le service s'exécute sous l'utilisateur SERVICE RÉSEAU.

Des conseils ou des problèmes similaires?

TN.
la source
Une trace ProcMon devrait être en mesure d'aider à identifier le problème. Si vous pouviez télécharger l' application Process Monitor , l'exécuter, démarrer le suivi, répéter les étapes que vous avez effectuées auparavant (pour reproduire l' erreur Access Denied ), arrêter la trace, l'enregistrer en tant que fichier PML ( tous les événements ) et partager le fichier avec nous, nous pourrions être en mesure de fournir la solution.
Tomas Dabasinskas

Réponses:

2

Vous devez exécuter à reloadpartir du même compte que l'exécution du service. Par exemple, si vous exécutez votre nginx en tant que SYSTEM, vous pouvez utiliser l' psexecoutil:

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

Yaroslav Sivakov
la source
1

J'exécute mon service nginx sous LOCAL SYSTEM et j'utilise la configuration xml suivante:

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

J'utilise Windows Service Wrapper 1.18 et cette configuration fonctionne pour moi. Les processus Nginx devraient maintenant être arrêtés sans problème. Bonne chance.

ssanchezz23
la source
où trouver ce xml? Le contexte est important!
Roel
0

Quelques choses à essayer:

  1. Pourquoi exécuter dans le compte NETWORK SERVICE? Essayez avec la valeur par défaut pour tous les services, LocalSystem.

  2. Suivez ce didacticiel pour essayer un autre wrapper, AlwaysUp . Si cela fonctionne, vous pouvez être confronté à un problème avec Windows Service Wrapper.

Veuillez rapporter ce que vous trouvez.

CoreTech
la source
0

pour que cela fonctionne pour moi sur Windows 10 avec nginx 1.9.15 j'ai dû ajouter

-p c:\nginx 

dans les arguments d'arrêt

<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
la source
0
  1. Ouvrez en cmdtant qu'administrateur .
  2. Ensuite, cddans le dossier où se trouve nginx, puis exécutez les commandes:

cmd (en tant qu'administrateur)

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