Encontramos el resultado a este inconveniente, o por lo menos eso pensamos. Si tienes preguntas coméntalo, que para nosotros será un gusto ayudarte
Solución:
La mejor manera de hacerlo es usar el pm2 startup
dominio
http://pm2.keymetrics.io/docs/usage/startup/
Para obtener el script de inicio configurado automáticamente para su máquina, debe escribir este comando:
# Detect available init system, generate configuration and enable startup system
pm2 startup
Puede especificar la plataforma que usa usted mismo si lo desea (donde la plataforma puede ser cualquiera de las citadas anteriormente):
pm2 startup [ubuntu | ubuntu14 | ubuntu12 | centos | centos6 | arch | oracle | amazon | macos | darwin | freebsd | systemd | systemv | upstart | launchd | rcd | openrc]
El resultado de este comando puede ser una recomendación de la línea para copiar/pegar con todas las variables de entorno y opciones configuradas para usted.
Ejemplo:
[PM2] Tienes que ejecutar este comando como root. Ejecute el siguiente comando: sudo su -c “env PATH=$PATH:/home/unitech/.nvm/versions/node/v4.3/bin pm2 startup -u –hp
Simplemente tiene que copiar/pegar la línea que le proporciona PM2 y el script de inicio se configurará para su sistema operativo.
Una vez que ejecute el sudo pm2 startup
. Creará el systemctl service
. Puede consultar el estado de la misma mediante
systemctl status pm2-root
De forma predeterminada, el servicio no está configurado para reiniciarse automáticamente. Ejecutará los siguientes comandos
sudo mkdir -p /etc/systemd/system/pm2-root.service.d
y luego crea un nombre de archivo 10_auto_restart_pm2.conf
con el contenido a continuación
[Service]
Restart=always
RestartSec=3
Después de eso ejecuta
systemctl daemon-reload
systemctl restart pm2-service
Ahora probemos la parte de reinicio automático
$ systemctl status pm2-root.service
● pm2-root.service - PM2 process manager
Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/pm2-root.service.d
└─10_auto_restart_pm2.conf
Active: active (running) since Wed 2018-02-28 16:52:19 UTC; 11s ago
Docs: https://pm2.keymetrics.io/
Process: 5014 ExecStop=/usr/local/lib/node_modules/pm2/bin/pm2 kill (code=exited, status=0/SUCCESS)
Process: 5022 ExecStart=/usr/local/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
Main PID: 5031 (PM2 v2.10.1: Go)
Tasks: 9
Memory: 24.3M
CPU: 460ms
CGroup: /system.slice/pm2-root.service
└─5031 PM2 v2.10.1: God Daemon (/home/vagrant/.pm2)
Ahora matamos el proceso manualmente y esperamos 3 segundos.
$ kill -9 5031
$ sleep 3
$ systemctl status pm2-root.service
● pm2-root.service - PM2 process manager
Loaded: loaded (/etc/systemd/system/pm2-root.service; enabled; vendor preset: enabled)
Drop-In: /etc/systemd/system/pm2-root.service.d
└─10_auto_restart_pm2.conf
Active: active (running) since Wed 2018-02-28 16:52:55 UTC; 641ms ago
Docs: https://pm2.keymetrics.io/
Process: 5057 ExecStop=/usr/local/lib/node_modules/pm2/bin/pm2 kill (code=exited, status=0/SUCCESS)
Process: 5081 ExecStart=/usr/local/lib/node_modules/pm2/bin/pm2 resurrect (code=exited, status=0/SUCCESS)
Main PID: 5088 (PM2 v2.10.1: Go)
Tasks: 9
Memory: 24.3M
CPU: 461ms
CGroup: /system.slice/pm2-root.service
└─5088 PM2 v2.10.1: God Daemon (/home/vagrant/.pm2)
Como puede ver, el proceso/servicio se reinició automáticamente. No se necesita cron y así es como debes hacerlo.
Lo que busca hacer es iniciar cualquier aplicación detenida sin incurrir en tiempo de inactividad. Una buena solución es utilizar el pm2 startOrReload
dominio. Esto iniciará cualquier aplicación detenida y volverá a cargar cualquier aplicación actual sin incurrir en tiempo de inactividad.
Necesitará un archivo de configuración para el comando. si actualmente no tiene uno, puede crearlo usando pm2 ecosystem
. Asegúrate de que apunta a app.js
.
Luego ejecute este comando en su trabajo cron:
pm2 startOrReload
Ver pm2 -h
, pm2 startOrReload -h
y pm2 ecosystem -h
para más opciones.
En lugar de iniciar el proceso pm2 dentro del cron, inicie un bashscript que verifique si pm2 ya se está ejecutando y lo reinicie si no es el caso.
Editar
Intente seguir (puede ser que la expresión pgrep deba ajustarse, no sé el nombre exacto del proceso pm2):
#!/bin/bash
pID=$(pgrep -x "pm2")
if [ -n "$pID" ];
then
#do nothing
echo $pID "already running. not restarting."
else
# start it
echo "restarting"
# put your command to start your process here
fi
Puntuaciones y comentarios
Si posees algún reparo o capacidad de aclarar nuestro división eres capaz de añadir una apostilla y con deseo lo ojearemos.