Saltar al contenido

¿Hay alguna forma de reiniciar el proceso pm2 usando cron pero solo si aún no se está ejecutando?

Solución:

La mejor forma de hacerlo es utilizar el pm2 startup mando

http://pm2.keymetrics.io/docs/usage/startup/

Para obtener la secuencia de comandos de inicio configurada 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 una 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 ejecuta el sudo pm2 startup. Creará el systemctl service. Puedes comprobar el estado del mismo usando

systemctl status pm2-root

De forma predeterminada, el servicio no está configurado para reiniciarse automáticamente. Ejecutarás 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 contenido a continuación

[Service]
Restart=always
RestartSec=3

Después de eso ejecutar

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 está buscando hacer es iniciar cualquier aplicación detenida sin incurrir en tiempo de inactividad. Una buena solución es utilizar el pm2 startOrReload mando. Esto iniciará las aplicaciones detenidas y volverá a cargar las aplicaciones actuales sin incurrir en tiempo de inactividad.

Necesitará un archivo de configuración para el comando. si no tiene uno, puede crearlo usando pm2 ecosystem. Asegúrate de que apunte a app.js.

Luego ejecute este comando en su trabajo cron:

pm2 startOrReload <your ecosystem file>

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 verifica si el pm2 ya se está ejecutando y lo reinicia si no es el caso.

Editar

Intente seguir (podría 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
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *