Hola, encontramos la solución a lo que estabas buscando, continúa leyendo y la hallarás aquí.
ACTUALIZACIÓN 16 DE FEBRERO DE 2020:
Si es importante para usted que PM2 se inicie automáticamente sin que inicie sesión en la máquina (después de reiniciar), siga mi nuevo conjunto de instrucciones en lugar de las antiguas.
Nuevas instrucciones (recomendadas):
Requisitos previos (parte n. ° 1):
Primero, he instalado NPM
en una ubicación que esté disponible para todos los usuarios. Dependiendo de su (s) caso (s) de uso, puede que no sea necesario. Pero si desea cambiar la ubicación predeterminada de NPM
– debe hacerlo primero (antes de continuar). Así es como lo cambia a la ubicación (en la terminal como administrador): C:NodeJSnpm
:
npm config set prefix "C:\NodeJS\npm"
npm config set cache "C:\NodeJS\npm-cache"
npm config set temp "C:\NodeJS\temp"
npm config ls -l (this will list all NPM settings -> look for the 3 lines/changes marked as `overriden`)
Requisitos previos (parte 2):
- Agregar y configurar
PM2_HOME
enSystem environments
(no entornos de usuario). Me gusta:PM2_HOME
=C:NodeJSnpm
- Agregar
C:NodeJSnpm
a la variable PATH del sistema existente (entonces está seguro de que funcionará; se han informado algunos problemas quePM2_HOME
no siempre funciona). - Cierre todos los terminales y ábralos de nuevo (como administrador). Las ventanas de su terminal ahora estarán al tanto de los cambios de su entorno.
Requisitos previos (parte 3):
- npm instalar pm2 -g
- npm i pm2-windows-service -g
- npm install -g npm-check-updates
Actualmente hay un error en un módulo que el paquete pm2-windows-service
usos, así que solucionemos esto también, siga los pasos a continuación:
- En terminal
cd
en:C:NodeJSnpmnode_modulespm2-windows-service
ncu inquirer
esto solo genera la versión existente y la más nueva disponible delinquirer
módulo que necesitamos actualizar, actualmente: versión:1.1.2
->7.0.4
.ncu inquirer -u
esto actualizará su archivo packages.json.npm install
esto descargará y actualizará elinquirer
módulo (tenga en cuenta si no utiliza una sintaxis de versión específica en supackages.json
archivo o ha realizado cambios manualmente -> otros módulos también se actualizarán.
Instale y configure PM2 (como servicio) para que se inicie automáticamente después de reiniciar:
- En terminal
cd
en:C:NodeJSnpmnode_modulespm2-windows-service
pm2-service-install -n PM2_STARTUP_SCRIPT
(PM2_STARTUP_SCRIPT
será el “Nombre para mostrar” del servicio de Windows. Cámbialo a lo que prefieras y pulsaENTER
.)- ¿Realizar la configuración del entorno (recomendado)?
Yes
- ¿Establecer PM2_HOME?
No
(No es necesario, ya lo ha configurado) - ¿Establecer PM2_SERVICE_SCRIPTS (la lista de scripts de inicio para pm2)?
Yes
- Establecer la lista de scripts / archivos de inicio (archivos de configuración json separados por punto y coma o archivos js)
ENTER
(cuando no se ingresa nada, por defecto usará PM2dump.pm2
archivo – que se crea cuando ejecutaPM2 -f save
, Volveré y explicaré esto más adelante). -
¿Establecer PM2_SERVICE_PM2_DIR (la ubicación del pm2 global para usar con el servicio)?
Yes
-
¿Especifique el directorio que contiene la versión pm2 que utilizará el servicio?
ENTER
Servicio PM2 instalado e iniciado.
- Abra Servicios en Windows y cambie el servicio para que se ejecute como Administrador (o su función preferida).
Configure las aplicaciones que desea PM2 para que se inicien, cuando se apague o después de reiniciar:
pm2 start myApp.js --name mySuperApp
pm2 -f save
- reiniciar o si usa AWS (o cualquier otro proveedor de nube). Reinicie su instancia: espere 5 minutos y luego inicie sesión en la máquina y ejecute
pm2 ls
y verifique que su aplicación haya estado funcionando durante ~ 5 minutos (y no solo unos segundos porque acaba de iniciar sesión).
Desinstale y limpie “pm2-windows-startup” de su registro (si cambia de mi “instrucción anterior” a las nuevas):
- npm desinstalar pm2-windows-startup -g
- Borrar el
PM2
key desde el registro como en la imagen de abajo:
Instrucciones antiguas (no recomendadas):
Mi respuesta anterior a continuación sigue funcionando, pero PM2 no se inicia a menos que inicie sesión en la máquina porque está cargando PM2 desde el registro y no lo ejecuta como un servicio.
No sé por qué, pero después de varios intentos, esto funcionó (en una instancia BASE de AWS Windows 2016 recién instalada)
- npm instalar pm2 -g
- npm instalar pm2-windows-startup -g
- instalación de pm2-startup
- pm2 inicia myApp.js –name mySuperApp
- pm2 guardar
- reiniciar
- pm2 ls
Encontré este tutorial muy útil: https://blog.cloudboost.io/nodejs-pm2-startup-on-windows-db0906328d75
el primer enfoque usando ‘nssm’ y un archivo .bat no funcionó para mí, así que seguí el enfoque 2: “Solución2: Usando pm2-windows-service”
Sin embargo, como se menciona en otras respuestas, el pm2-windows-service
tiene un error,
que resolvió esta bifurcación: https://www.npmjs.com/package/@innomizetech/pm2-windows-service
así que en lugar del paquete anterior:
npm install -g pm2-windows-service
usa el nuevo:
npm install -g @innomizetech/pm2-windows-service
aquí un breve resumen del tutorial:
Configurar pm2
npm i -g pm2
- Copiar
C:UsersUSER.pm2
aC:etc.pm2
- establezca un nuevo nombre de variable de sistema (no a nivel de usuario):
PM2_HOME
valor:c:etc.pm2
Ejecutando su aplicación con pm2
- ejecute su aplicación pm2. es decir:
pm2 start app.js --name=MY_API
. pm2 save
para crear un volcado de las aplicaciones actuales en ejecución.
Aplicación de prueba
- para probar que todo está funcionando, intente:
pm2 kill
y luegopm2 resurrect
(la aplicación debería estar ejecutándose, consulte conpm2 status
)
Ejecutar en el arranque
ahora tenemos que realizar el comando resucitar al inicio, así que:
npm install -g @innomizetech/pm2-windows-service
pm2-service-install -n PM2 --unattended
Eso es.
pm2-windows-startup
funciona muy bien si está de acuerdo con el hecho de que se inicia al iniciar sesión. Sin embargo, si reinicia un servidor (por ejemplo, Windows Update) no tiene suerte.
pm2-windows-service
funcionó para mí, usando @innomizetech
fork, pero he tenido algunos problemas, probablemente debido al usuario o su configuración, o algo más. Básicamente, el servicio iniciaría una versión anterior de la lista de procesos guardada, aunque lo intenté pm2 delete all
, pm2 start ecosystem.config.js
, pm2 save
.
Recurrí a una solución casera muy sencilla:
- Crea un archivo
pm2-resurrect.sh
enC:
, que contiene la línea únicapm2 resurrect
. - En el Programador de tareas, agregue una nueva tarea que se ejecute al arrancar y seleccione que se ejecute independientemente de que el usuario haya iniciado sesión o no. Debe escribir la contraseña de usuario en este punto, que se guarda para ejecuciones sucesivas.
- Establecer el comando de tarea para ejecutar el archivo
C:pm2-resurrect.sh
.
En mi caso tengo Git para Windows que viene con bash, que abre el archivo y lo ejecuta. No lo probé, pero supongo que podrías tener un .cmd
archivo con el mismo contenido.
Eres capaz de añadir valor a nuestra información dando tu veteranía en las notas.