Últimas entradas

Supervisor, control de procesos en sistemas operativos UNIX

Supervisor es un sistema cliente / servidor que permite a sus usuarios monitorear y controlar una serie de procesos en los sistemas operativos UNIX.

En ocasiones para ejecutar ciertas librerias/frameworks backend tenemos que abrir una terminal e iniciarlas, lo que nos hace dependientes de que si la terminal se cierra, nuestra aplicación no funcionará.

Supervisor es compatible con casi todos los sistemas operativos, excepto Windows. Está probado y soportada en Linux, Mac OS X, Solaris y FreeBSD. Está escrito completamente en Python, por lo que la instalación no requiere un compilador C.

Supervisor nos permite asignar prioridades a los procesos, y permite al usuario emitir comandos a través del cliente “supervisorctl” como “start all”, y “restart all”.

Para este post usaremos como demostración Centos 7

Instalación

Realizaremos Instalación Centos/RHEL

[root@localhost ~]$ yum install python-setuptools
[root@localhost ~]$ easy_install supervisor
[root@localhost ~]$ supervisord --version
3.3.1

Configuración

Supervisor incluye una funcionalidad llamada echo_supervisord_conf, el cual usaremos para crear nuestro archivo de configuración.

[root@localhost ~]$ echo_supervisord_conf > /etc/supervisord.conf

En el caso quiera agregar nuevas directivas para supervisor, deberemos hacerlo en /etc/supervisord.conf

Aunque podemos usar iniciar supervisor usando el comando supervisor, vamos a crear un servicio que nos permita iniciarlo, detenerlo y reiniciarlo, que será agregado en /etc/rc.d/init.d/supervisord

#!/bin/bash
 
. /etc/init.d/functions
 
DAEMON=/usr/bin/supervisord
PIDFILE=/var/run/supervisord.pid
 
[ -x "$DAEMON" ] || exit 0
 
start() {
        echo -n "Starting supervisord: "
        if [ -f $PIDFILE ]; then
                PID=`cat $PIDFILE`
                echo supervisord already running: $PID
                exit 2;
        else
                daemon  $DAEMON --pidfile=$PIDFILE -c /etc/supervisord.conf
                RETVAL=$?
                echo
                [ $RETVAL -eq 0 ] && touch /var/lock/subsys/supervisord
                return $RETVAL
        fi
}
 
stop() {
        echo -n "Shutting down supervisord: "
        echo
        killproc -p $PIDFILE supervisord
        echo
        rm -f /var/lock/subsys/supervisord
        return 0
}
 
case "$1" in
    start)
        start
        ;;
    stop)
        stop
        ;;
    status)
        status supervisord
        ;;
    restart)
        stop
        start
        ;;
    *)
        echo "Usage:  {start|stop|status|restart}"
        exit 1
        ;;
esac
exit $?

Crearemos un archivo /etc/rc.d/init.d/supervisord el cual debe tener el script anterior y le asignamos permisos de ejecución

[root@localhost ~]$ vim /etc/rc.d/init.d/supervisord
[root@localhost ~]$ chmod 755 /etc/rc.d/init.d/supervisord

Luego podremos iniciar, detener y reiniciar el servicio.

[root@localhost ~]$ service supervisord start
[root@localhost ~]$ service supervisord stop
[root@localhost ~]$ service supervisord status
[root@localhost ~]$ service supervisord restart

El siguiente archivo de configuración se usó para levantar una aplicación realizada con dotnet, el cual se agregó en /etc/supervisord.conf

[program:VRS.WebApp]
command=/opt/rh/dotnet /home/publish/Idt.WebApp.dll
directory=/home/publish/
autostart=true
autorestart=true
stderr_logfile=/var/log/Idt.WebApp.err.log
stdout_logfile=/var/log/Idt.WebApp.out.log
environment=ASPNETCORE__ENVIRONMENT=Production
user=www-data
stopsignal=INT

Mayor referencia verificar en:
https://github.com/Supervisor/supervisor
http://supervisord.org/

One thought on “Supervisor, control de procesos en sistemas operativos UNIX

Agregue un comentario

Su dirección de correo no se hará público. Los campos requeridos están marcados *