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”