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?
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 .)
winsw-1.xx-bin.exe
en quelque chose comme nginxservice.exe
.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>
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>
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é.
Vous pouvez utiliser start.bat et stop.bat pour obtenir le même effet.
@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.
)
@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.
)
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) ...
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.
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
.
Téléchargez le fichier zip de ici .
Extrayez nginx-service.exe
de winginx\build
et exécutez-le.
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
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.
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.