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/