Ajouter nginx.exe en tant que service système Windows (comme Apache)?

J’ai configuré NGINX comme serveur frontal pour le contenu statique et j’utilise Apache comme serveur principal pour autre chose.

La chose est que je ne peux pas trouver une réponse logique qui me permet de faire nginx.exe un service de système Windows (comme mon Apache).

Quelqu’un a rencontré une réponse à cela?

Comment le faire avec Windows Service Wrapper

(Remarque: il existe des alternatives prometteuses – voir aussi la solution NSSM décrite dans la réponse ci-dessous d’ Adamy .)

  1. Téléchargez la dernière version de Windows Service Wrapper via github ou nuget .
    • La version actuelle de cette écriture est la v2.1.2
    • Comme les exécutables v2.x pour .NET2.0 et .NET4.0 sont disponibles – d’autres uniquement à la demande.
  2. Renommez winsw-1.xx-bin.exe en quelque chose comme nginxservice.exe .
    • C’est le nom qui apparaîtra pour le processus qui possède votre processus nginx.
  3. Placez un fichier XML à côté de l’exe avec le même nom de base, par exemple nginxservice.xml . Le contenu devrait être comme ci-dessous (vérifiez votre emplacement nginx).

      nginx nginx nginx c:\nginx\nginx.exe c:\nginx\ roll  -p c:\nginx c:\nginx\nginx.exe -p c:\nginx -s stop  
    • Vous pouvez trouver des détails à jour sur la configuration sur la page de configuration github , un exemple générique montrant toutes les options possibles ici et un guide d’installation .
  4. Exécutez la commande nginxservice.exe install .

Vous aurez maintenant un service nginx dans vos services! (Il est configuré pour démarrer automatiquement au démarrage; si vous souhaitez démarrer votre serveur, vous devez le démarrer manuellement ( net start nginx ).)


Description détaillée de la configuration correcte de nginx en tant que service Windows: http://web.archive.org/web/20150819035021/http://misterdai.yougeezer.co.uk/posts/2009/10/16/nginx-windows- un service/

Informations supplémentaires non contenues dans l’article ci-dessus:

Vous pouvez également trouver la dernière version de Windows Service Wrapper via ce référentiel Maven: http://repo.jenkins-ci.org

Exemple:

  com.sun.winsw winsw 2.1.2 bin exe   jenkinsci jenkinsci-releases http://repo.jenkins-ci.org/releases  

Téléchargez le formulaire NSSM http://nssm.cc/download . “Exécutez% NSSM_HOME% \ nssm.exe installez” Nginx “”

Sélectionnez l’exécutable Nginx dans la boîte de dialog NSSM, puis sur OK. Allez dans Services et lancez le nouveau service créé “Nginx”, terminé.

SC.EXE ne fonctionnera que pour les exécutables qui prennent déjà en charge l’API Windows Services et peuvent répondre correctement pour démarrer et arrêter les requêtes du Gestionnaire de contrôle des services (SCM). Les autres applications régulières, non spécifiquement écrites en tant que service, ne pourront tout simplement pas démarrer (généralement avec l’erreur 1053) …

Pour ces exe, vous avez besoin d’un “wrapper de service” – un petit utilitaire qui peut accepter les commandes de démarrage / arrêt du SCM et exécuter / terminer votre application en conséquence. Microsoft fournit Srvany (qui est gratuit mais très basique), mais il existe plusieurs autres alternatives gratuites et commerciales.

BTW, vous devriez consulter ce guide montrant comment exécuter Nginix en tant que service , en particulier l’étape 7 qui explique comment arrêter correctement Nginix. Tous les wrapper ne supporteront pas cette fonctionnalité (Srvany ne le fait pas) …

Vous pouvez utiliser start.bat et stop.bat pour obtenir le même effet.

start.bat

 @ECHO OFF REM Start Nginx tasklist /FI "IMAGENAME eq nginx.exe" 2>NUL | find /I /N "nginx.exe">NUL IF NOT "%ERRORLEVEL%"=="0" ( REM Nginx is NOT running, so start it c: cd \nginx start nginx.exe ECHO Nginx started. ) else ( ECHO Nginx is already running. ) 

stop.bat

 @ECHO OFF REM Stop Nginx tasklist /FI "IMAGENAME eq nginx.exe" 2>NUL | find /I /N "nginx.exe">NUL IF "%ERRORLEVEL%"=="0" ( REM Nginx is currently running, so quit it c: cd \nginx nginx.exe -s quit ECHO Nginx quit issued. ) else ( ECHO Nginx is not currently running. ) 

Le moyen le plus simple que j’ai trouvé était d’utiliser le gestionnaire de paquets Chocolatey .

Une fois que Chocolatey est installé, vous ouvrez une invite d’administration et tapez:

 choco install nginx 

Vous avez maintenant un service Windows nommé ‘nginx’ en cours d’exécution.

Téléchargez le fichier zip ici .

Extrayez nginx-service.exe de winginx\build et exécutez-le.

Wiki officiel nginx fait référence à winginx à cette fin. Il construit exe-installer dans un environnement Linux. Processus ressemble à ceci:

 sudo apt-get install nsis make wget https://github.com/InvGate/winginx/archive/master.zip unzip master.zip cd winginx-master/ make ls -lh ./build/nginx-service.exe 

Pour obtenir des versions réelles, vous devez les spécifier dans Makefile .

Plutôt que de transformer nginx en un service ou d’utiliser CMD pour démarrer un processus, ce qui ne semble vraiment pas fonctionner. J’ai trouvé que Powershell facilite le démarrage de nginx en tant que processus indépendant. J’ai combiné le démarrage de nginx avec PHP. Ci-dessous le script nommé “start-nginx.ps1”

 $fcgiPort = "127.0.0.1:9000" $PHPini = "c:\php\php.ini" $ErrorActionPreference = "SilentlyContinue" function restart { Push-Location /nginx Stop-Process -Force -Name nginx Start-Process ./nginx.exe -WindowStyle Hidden Stop-Process -Force -Name php-cgi Start-Process "c:\php\php-cgi.exe" -ArgumentList ("-b" + $fcgiPort + " -c " + $PHPini) -WindowStyle Hidden Pop-Location } restart 

Ce script peut être exécuté à partir de n’importe quel répertoire, mais doit être personnalisé pour l’emplacement de votre installation nginx.

Ce script inclut une tentative silencieuse de tuer nginx et PHP avant de lancer les deux.

Les systèmes Windows sont supposés reconnaître les fichiers “.ps1” en tant que powershell, même dans l’invite CMD.

J’ai créé un autre petit script pour tuer les processus en cours d’exécution, ce qui supprime simplement les lignes “start-process” de ce fichier.

Pour lancer au démarrage, j’ai utilisé la commande win-R pour naviguer dans le répertoire shell: startup

En plaçant un raccourci vers le script de démarrage dans ce répertoire, nginx démarre au démarrage!

Powershell inclut également une capacité beaucoup plus sophistiquée de planifier des tâches, et il est possible de planifier l’exécution de ce script au démarrage. Voir ce lien

De l’article:

  >powershell $sortinggger = New-JobTrigger -AtStartup -RandomDelay 00:00:30 Register-ScheduledJob -Trigger $sortinggger -FilePath $HOME/start-nginx.ps1 -Name startNginx 

Combiné, je pense que cette approche vous permet d’obtenir tout ce dont vous avez besoin d’un service Windows nginx et ne nécessite aucune application tierce.

NSSM est le meilleur outil pour exécuter Nginx en tant que service.
Si vous ne souhaitez utiliser aucun logiciel tiers externe, vous pouvez implémenter l’une de ces deux méthodes.

  • Planificateur de tâches Windows
  • Raccourci de démarrage Windows

Planificateur de tâches Windows

  • Comme mentionné dans cette réponse, préparez un fichier start.bat.
  • Placez ce fichier où nginx.exe est présent.
  • Ouvrez le planificateur de tâches Windows et configurez la tâche comme décrit dans cette réponse pour l’exécuter indéfiniment.
  • N’oubliez pas d’exécuter cette tâche en tant que privilège le plus élevé avec le compte système, plus de détails peuvent être trouvés ici .
  • Pour que la tâche démarre tous les jours à un moment donné, le fichier bat vérifiera si le service est déjà en cours d’exécution pour éviter de créer plusieurs instances de nginx.exe.
  • Si, pour une raison quelconque, Nginx s’arrête, il commencera dans les 5 minutes.

Raccourci de démarrage Windows

  • Créez un raccourci de nginx.exe et placez-le dans le dossier de démarrage de Windows.

  • Suivez cette réponse pour trouver votre emplacement de démarrage.

  • Nginx s’exécutera automatiquement à chaque connexion au système.
  • Celui-ci est le plus facile. Cependant, cela dépend du profil de l’utilisateur, c’est-à-dire que si vous exécutez Nginx sur un serveur, celui-ci ne fonctionnera que pour votre compte d’utilisateur, lorsque vous vous déconnecterez, il s’arrêtera.
  • Ceci est idéal pour l’environnement de développement.