Saltar al contenido

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

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 -hy 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.

¡Haz clic para puntuar esta entrada!
(Votos: 1 Promedio: 5)



Utiliza Nuestro Buscador

Deja una respuesta

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