web-dev-qa-db-fra.com

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

J'ai configuré NGINX en tant que serveur frontal pour le contenu statique et j'utilise Apache en tant que serveur principal.

Le problème est que je ne trouve pas de réponse logique qui me permette de transformer nginx.exe en service système Windows (comme Apache).

Vous trouvez une réponse à cela?

50
user1305810

Comment le faire avec Windows Service Wrapper

(Remarque: Il existe actuellement des alternatives prometteuses - voir également la solution NSSM décrite dans la réponse ci-dessous } de Adamy .)

  1. Téléchargez la dernière version de Windows Service Wrapper via github ou nuget .
    • La version actuelle à ce jour est v2.1.2
    • Depuis la version 2.x, les fichiers exécutables pour .NET2.0 et .NET4.0 sont disponibles, les autres uniquement à la demande.
  2. Renommez winsw-1.xx-bin.exe en quelque chose comme nginxservice.exe.
    • Ceci est le nom qui apparaîtra pour le processus propriétaire 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).

    <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>
    
  4. Exécutez la commande nginxservice.exe install.

Vous allez maintenant avoir 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 démarrer le service 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-service /

Informations supplémentaires non contenues dans l'article de blog ci-dessus:

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

Exemple:

<dependency>
    <groupId>com.Sun.winsw</groupId>
    <artifactId>winsw</artifactId>
    <version>2.1.2</version>
    <classifier>bin</classifier>
    <packaging>exe</packaging>
</dependency>

<repository>
    <id>jenkinsci</id>
    <name>jenkinsci-releases</name>
    <url>http://repo.jenkins-ci.org/releases</url>
</repository>
72
Jörg

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

Sélectionnez l'exécutable Nginx dans la boîte de dialogue NSSM, puis cliquez sur OK . Accédez à Services et démarrez le nouveau service créé "Nginx", c'est terminé.

43
Adamy

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.
)
6
xgqfrms

SC.EXE fonctionnera uniquement avec les exécutables prenant déjà en charge l'API Windows Services et pouvant répondre correctement au démarrage et à l'arrêt des demandes provenant du Gestionnaire de contrôle des services (SCM). D'autres applications classiques, 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 "service wrapper" - un petit utilitaire pouvant accepter les commandes de démarrage/d'arrêt du MSC et exécuter/arrêter votre application en conséquence. Microsoft fournit Srvany (qui est gratuit mais très basique), mais il existe plusieurs autres alternatives gratuites et commerciales.

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

6
CoreTech

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

Une fois que Chocolatey est installé, vous ouvrez une invite administrative et tapez:

choco install nginx

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

4
suneg

Official nginx wiki fait référence à winginx à cet effet. Il construit un installateur exe dans un environnement linux . Le 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 les versions actuelles, vous devez les spécifier dans Makefile.

1
user3132194

Téléchargez le fichier zip de ici .

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

1
Dileepa

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 indiqué dans cette réponse pour l'exécuter indéfiniment.
  • N'oubliez pas d'exécuter cette tâche avec les privilèges les plus élevés avec le compte système. Vous trouverez plus de détails à ce sujet ici .
  • Faites en sorte que la tâche démarre quotidiennement à un moment donné. Par le biais du fichier bat, elle vérifiera si le service est déjà en cours d’exécution pour éviter de créer plusieurs instances nginx.exe.
  • Si, pour une raison quelconque, Nginx s'arrête, il démarrera dans les 5 minutes.

Windows raccourci de démarrage 

  • 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 fois que vous vous connecterez au système. 
  • Celui-ci est le plus facile. Toutefois, 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, cela s’arrêtera.
  • C'est idéal pour l'environnement de développement.
0
Soumendra

Plutôt que de transformer nginx en un service, ou d’utiliser CMD pour démarrer un processus, qui ne semble vraiment pas fonctionner. J'ai constaté que Powershell facilite le démarrage de nginx en tant que processus détaché. 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, ce qui supprime simplement les lignes "start-process" de ce fichier. 

Pour l’exécuter au démarrage, j’ai utilisé la commande win-R pour accéder au répertoire Shell: startup

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

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

De l'article:

 >powershell

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

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

0
sdw