segundo - Agregue nginx.exe como servicio de sistema de Windows(como Apache)?
ejecutar.exe como servicio de windows (9)
Puedes usar start.bat y stop.bat para obtener el mismo efecto.
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.
)
Configuré NGINX como un servidor front-end para contenido estático y utilizo Apache como servidor back-end para otra cosa.
La cuestión es que no puedo encontrar una respuesta lógica que me permita convertir nginx.exe
un servicio de sistema de Windows (como mi Apache).
¿Alguna respuesta a esto?
Cómo hacerlo con Windows Service Wrapper
(Nota: hay alternativas prometedoras por ahora, ver también la solución NSSM descrita en la respuesta a continuación de Adamy ).
- Descargue la última versión del Contenedor de servicios de Windows a través de github o nuget .
- La versión actual al momento de escribir esto es v2.1.2
- Como los ejecutables v2.x para .NET2.0 y .NET4.0 están disponibles, otros solo a pedido.
- Cambie el nombre de
winsw-1.xx-bin.exe
a algo así comonginxservice.exe
.- Este es el nombre que se mostrará para el proceso que posee su proceso nginx.
Coloque un archivo XML al lado del exe con el mismo nombre base, por ejemplo,
nginxservice.xml
. Los contenidos deberían ser como a continuación (verifique su ubicación en 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>
- Puede encontrar detalles actualizados sobre la configuración en la página config github , un ejemplo genérico que muestra todas las opciones posibles here y una guía de instalación .
- Ejecute el comando
nginxservice.exe install
.
¡Ahora tendrá un servicio nginx
en sus Servicios! (Está configurado para iniciarse automáticamente al arrancar; si desea iniciar su servidor, debe iniciar manualmente el servicio ( net start nginx
).)
Descripción detallada de la configuración correcta de nginx como un servicio de Windows: http://web.archive.org/web/20150819035021/http://misterdai.yougeezer.co.uk/posts/2009/10/16/nginx-windows-service/
Información adicional no incluida en la publicación de blog anterior:
Puede encontrar la última versión de Windows Wrapper Service también a través de este Repositorio Maven: http://repo.jenkins-ci.org
Ejemplo:
<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>
Descarga el archivo zip desde here .
Extraiga nginx-service.exe
de winginx/build
y ejecútelo.
Descargue el formulario NSSM http://nssm.cc/download . "Ejecute% NSSM_HOME% / nssm.exe install" Nginx ""
Seleccione el ejecutable Nginx en el diálogo NSSM, luego OK. Vaya a Servicios e inicie el nuevo servicio creado "Nginx", hecho.
En lugar de convertir nginx en un servicio, o usar CMD para iniciar un proceso, que realmente no parece funcionar. Descubrí que Powershell facilita el inicio de nginx como un proceso independiente. He combinado el inicio de nginx con PHP. A continuación se muestra el guión, llamado "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
Este script se puede ejecutar desde cualquier directorio, pero necesita ser personalizado para donde se encuentra su instalación de nginx.
Este script incluye un intento silencioso de eliminar nginx y PHP antes de ejecutar ambos.
Se supone que los sistemas de Windows reconocen los archivos ".ps1" como powershell, incluso en el prompt de CMD.
Creé otro script pequeño para matar los procesos en ejecución, que simplemente elimina las líneas de "inicio de proceso" de este archivo.
Para ejecutar al inicio, utilicé el comando win-R para navegar al shell del directorio: inicio
Al colocar un acceso directo a la secuencia de comandos de inicio en este directorio, nginx comienza en el arranque.
Powershell también incluye una capacidad mucho más sofisticada para programar tareas, y es posible programar este script para que se ejecute al inicio. Ver este enlace
Del artículo:
>powershell
$trigger = New-JobTrigger -AtStartup -RandomDelay 00:00:30
Register-ScheduledJob -Trigger $trigger -FilePath $HOME/start-nginx.ps1 -Name startNginx
En conjunto, creo que este enfoque le proporciona todo lo que necesita de un servicio nginx windows y no requiere ninguna aplicación de terceros.
La wiki oficial de nginx se refiere a winginx para este propósito. Construye exe-installer en entorno Linux. El proceso se ve así:
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
Para obtener versiones reales, debe especificarlas en Makefile
.
La forma más fácil que he encontrado, fue usar el administrador de paquetes Chocolatey .
Una vez que Chocolatey está instalado, abre un prompt administrativo y escribe:
choco install nginx
Ahora tiene un servicio de Windows llamado ''nginx'' en ejecución.
NSSM es la mejor herramienta para ejecutar Nginx como un servicio.
Si no desea utilizar ningún software externo de terceros , puede implementar cualquiera de estos dos métodos.
- Programador de tareas de Windows
- Acceso directo de inicio de Windows
Programador de tareas de Windows
- Como se menciona en esta respuesta, prepare un archivo start.bat.
- Coloque este archivo donde está presente nginx.exe.
- Abra el programador de tareas de Windows y configure la tarea como se describe en esta respuesta para ejecutarla indefinidamente.
- No se olvide de ejecutar esta tarea como el privilegio más alto con la cuenta del sistema, puede encontrar más detalles here .
- Haga que la tarea comience todos los días a una hora determinada, a través del archivo bat se comprobará si el servicio ya se está ejecutando para evitar crear varias instancias de nginx.exe.
- Si por algún motivo Nginx se apaga, en 5 minutos comenzará.
Acceso directo de inicio de Windows
Cree un acceso directo de nginx.exe y colóquelo en la carpeta de inicio de Windows.
Sigue esta respuesta para encontrar tu ubicación de inicio.
- Nginx se ejecutará automáticamente cada vez que inicie sesión en el sistema.
- Este es el más fácil. Sin embargo, depende del perfil del usuario, es decir, si está ejecutando Nginx en un servidor, se ejecutará solo para su cuenta de usuario, cuando cierre sesión, se detendrá.
- Esto es ideal para el entorno de desarrollo.
SC.EXE solo funcionará para archivos ejecutables que ya sean compatibles con la API de servicios de Windows y puedan responder correctamente para iniciar y detener solicitudes desde el Administrador de control de servicios (SCM). Otras aplicaciones regulares, no específicamente escritas como un servicio, simplemente no podrán iniciarse (generalmente con el error 1053) ...
Para esos exe, necesita una "envoltura de servicio", una pequeña utilidad que puede aceptar los comandos de inicio / detención desde el SCM y ejecutar / finalizar su aplicación en consecuencia. Microsoft proporciona Srvany (que es gratuito pero muy básico), pero hay muchas otras alternativas gratuitas y comerciales.
Por cierto, debería consultar esta guía que muestra cómo ejecutar Nginix como un servicio , especialmente el paso 7 que trata sobre cómo detener Nginix correctamente. No todas las envolturas soportarán esa funcionalidad (Srvany no) ...