web-dev-qa-db-fra.com

lancer nginx en tant que service windows

J'essaie d'exécuter nginx (proxy inverse) en tant que service Windows afin de pouvoir envoyer une requête par proxy même lorsqu'un utilisateur n'est pas connecté.

J'ai beaucoup cherché et trouvé winsw qui pourrait créer un service à partir d'un fichier .exe (tel que nginx).

j'ai trouvé de nombreux tutoriels en ligne disant de créer un fichier XML comme suit

<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 c:\nginx</startargument>
   <stopargument>-p c:\nginx -s stop</stopargument>
</service>

(J'ai nginx.exe dans un dossier appelé nginx sous c: o les chemins sont corrects).

Maintenant, le problème est que le service est créé mais que je n'arrive pas à le faire démarrer, chaque fois que j'essaie de le démarrer, une fenêtre s'ouvre en disant

Error 1053: The service didn't respond to the start or control request in a timely fashion

Est-ce que quelqu'un sait comment puis-je réparer cela ou une autre façon d'exécuter nginx en tant que service de fenêtre?

8
John Smith

J'ai trouvé NSSM (le gestionnaire de services non-suceurs): un programme qui fait exactement ce que je veux et qui est beaucoup plus facile à configurer.

2
John Smith

Je suis tombé par hasard ici et j'ai réussi à faire fonctionner les choses avec cette alternative gratuite à source ouverte: https://nssm.cc/

Il s’agit essentiellement d’une interface graphique destinée à vous aider à créer un service. Les étapes que j'ai utilisées:

  1. Téléchargez NGinx ( http://nginx.org/en/download.html ) et compressez-vous au format C:\foobar\nginx.
  2. Télécharger nssm ( https://nssm.cc/ )
  3. Exécutez "nssm install nginx" à partir de la ligne de commande
  4. Dans NSSM, procédez comme suit:
  5. Sous l'onglet Application: définissez le chemin d'accès sur C:\foobar\nginx\nginx.exe, définissez le répertoire de démarrage sur C:\foorbar\nginx
  6. Sur l'onglet I/O, tapez "start nginx" sur l'entrée lente. Définissez éventuellement C:\foobar\nginx\logs\service.out.log et C:\foobar\nginx\logs\service.err.log dans les logements de sortie et d'erreur.
  7. Cliquez sur "installer le service". Allez aux services, lancez "nginx". Hit http: // localhost: 80 et vous devriez obtenir la connexion nginx. Désactivez le service, désactivez le cache du navigateur et actualisez, l'écran ne devrait plus se charger 

Vous devriez être bon à partir de là.

21
Dave

J'ai trouvé une autre solution que NSSM . C’est Windows Service Wrapper et voici les instructions:

  1. Téléchargez la dernière version de Windows Service Wrapper via github .

    • La version actuelle de cette écriture est la v2.1.2 (Depuis la version 2.x, les fichiers exécutables pour .NET2.0 et .NET4.0 sont disponibles - les autres uniquement sur demande.)
  2. Renommez winsw-xxxx.exe en quelque chose comme nginxservice.exe.

    • C'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>

  • Vous trouverez des informations actualisées sur la configuration sur la page config GitHub et un exemple générique montrant toutes les options possibles ici .

    1. 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).)

La réponse ci-dessus a été prise à partir d'un post .

2
Sam G

Comme indiqué dans d'autres réponses, 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.
1
Soumendra

Vous en aurez besoin pour Winsw

   <service>
        <id>nginx</id>
        <name>nginx</name>
        <description>nginx</description>
        <executable>c:\...\nginx.exe</executable>
        <logpath>...</logpath>
        <logmode>roll</logmode>
        <stopexecutable>c:\nginx\nginx-1.14.0\nginx.exe</stopexecutable>
        <stopargument>-s</stopargument>
        <stopargument>stop</stopargument>
    </service>

Vous aurez besoin d'un <executable> en supposant que vous utilisez le fichier nginx.conf. Par conséquent, vous n'avez pas besoin d'arguments de démarrage, ainsi que d'un <stopexecutable> et d'un <stopargument>s (pour afficher nginx -s stop).

0
tmjee