Cómo instalar y administrar Supervisor

Introducción
En muchos entornos de VPS, es frecuente que tengas varios programas pequeños que quieras ejecutar de forma persistente, ya sean pequeños scripts de shell, aplicaciones Node.js o cualquier paquete de gran tamaño.
Por lo general, los paquetes externos se suministran con un archivo de unidad que permite que un sistema de inicio, como systemd
, los administre o se empaqueten como imágenes de Docker que pueden administrarse mediante un motor de contenedores. Sin embargo, para el software que no está bien empaquetado o para los usuarios que prefieren no interactuar con un sistema de inicio de bajo nivel en su servidor, es útil tener una alternativa liviana.
Supervisor es un administrador de procesos que proporciona una interfaz única para administrar y supervisar una serie de programas de larga duración. En este tutorial, instalará Supervisor en un servidor Linux y aprenderá a administrar las configuraciones de Supervisor para múltiples aplicaciones.
Prerrequisitos
Para completar esta guía, necesitarás:
- Un servidor Linux y un usuario no root con privilegios sudo. Puede obtener más información sobre cómo configurar un usuario con estos privilegios en nuestra guía Configuración inicial del servidor con Ubuntu 20.04 .
Paso 1 – Instalación
Comience actualizando las fuentes de sus paquetes e instalando Supervisor:
- sudo apt update sudo apt install supervisor
El servicio de supervisión se ejecuta automáticamente después de la instalación. Puede comprobar su estado:
- sudo systemctl status supervisor
Debería recibir el siguiente resultado:
Output● supervisor.service - Supervisor process control system for UNIX Loaded: loaded (/lib/systemd/system/supervisor.service; enabled; vendor preset: enabled) Active: active (running) since Wed 2021-11-17 22:56:48 UTC; 5min ago
Ahora que tenemos instalado Supervisor, podemos comenzar a agregar nuestros primeros programas.
Paso 2 – Agregar un programa
Una buena práctica para trabajar con Supervisor es escribir un archivo de configuración para cada programa que manejará.
Todos los programas que se ejecutan bajo Supervisor deben ejecutarse en un modo sin daemonización (a veces también llamado “modo de primer plano”). Si, de forma predeterminada, su programa regresa automáticamente al shell después de ejecutarse, es posible que deba consultar el manual del programa para encontrar la opción para habilitar este modo, o Supervisor no podrá determinar correctamente el estado del programa.
Para demostrar la funcionalidad de Supervisor, crearemos un script de shell que no hace nada más que producir una salida predecible una vez por segundo, pero que se ejecutará continuamente en segundo plano hasta que se detenga manualmente. Con nano
su editor de texto favorito, abra un archivo llamado idle.sh
en su directorio de inicio:
- nano ~/idle.sh
Añade el siguiente contenido:
~/idle.sh
#!/bin/bashwhile truedo # Echo current date to stdoutecho `date`# Echo 'error!' to stderrecho 'error!' 2sleep 1done
Guarde y cierre el archivo. Si está utilizando nano
, presione Ctrl+X
, luego, cuando se le solicite, Y
y Enter.
A continuación, haga que su script sea ejecutable:
- chmod +x ~/idle.sh
Los archivos de configuración por programa para los programas Supervisor se encuentran en el /etc/supervisor/conf.d
directorio, que generalmente ejecuta un programa por archivo y termina en .conf.
Crearemos un archivo de configuración para este script, como `/etc/supervisor/conf.d/idle.conf:
- sudo nano /etc/supervisor/conf.d/idle.conf
Añade estos contenidos:
/etc/supervisor/conf.d/idle.conf
command=/home/ubuntu/idle.shautostart=trueautorestart=truestderr_logfile=/var/log/idle.err.logstdout_logfile=/var/log/idle.out.log
Repasaremos esto línea por línea:
command=/home/ubuntu/idle.sh
La configuración comienza definiendo un programa con el nombre idle
y la ruta completa al programa:
autostart=trueautorestart=true
Las siguientes dos líneas definen el comportamiento automático del script bajo ciertas condiciones.
La autostart
opción le indica al supervisor que este programa debe iniciarse cuando se inicia el sistema. Si se configura como falso, se requerirá un inicio manual después de cualquier apagado del sistema.
autorestart
define cómo debe Supervisor gestionar el programa en caso de que éste salga:
false
Le dice al Supervisor que nunca reinicie el programa después de salir.true
Le dice al Supervisor que siempre reinicie el programa después de salir.unexpected
Le indica a Supervisor que solo reinicie el programa si sale con un código de error inesperado (de manera predeterminada, cualquier código que no sea 0 o 2). Para obtener más información sobre los códigos de error, consulte elerrno
comando.
stderr_logfile=/var/log/idle.err.logstdout_logfile=/var/log/idle.out.log
Las dos últimas líneas definen las ubicaciones de los dos archivos de registro principales del programa. Como lo sugieren los nombres de las opciones, stdout y stderr se dirigirán a las ubicaciones stdout_logfile
y stderr_logfile
respectivamente. Los directorios especificados ya deben existir, ya que Supervisor no intentará crear ningún directorio faltante.
La configuración que hemos creado aquí es una plantilla mínima para un programa Supervisor. La documentación de Supervisor enumera muchas más opciones de configuración opcionales que están disponibles para ajustar la forma en que se ejecutan los programas.
Una vez creado y guardado nuestro archivo de configuración, podemos informar a Supervisor de nuestro nuevo programa mediante el supervisorctl
comando. Primero le indicamos a Supervisor que busque cualquier configuración de programa nueva o modificada en el /etc/supervisor/conf.d
directorio con:
- sudo supervisorctl reread
Outputidle: available
Seguido de indicarle que implemente cualquier cambio con:
- sudo supervisorctl update
Outputidle: added process group
Cada vez que realice un cambio en cualquier archivo de configuración del programa, al ejecutar los dos comandos anteriores los cambios surtirán efecto.
En este punto, nuestro programa debería estar ejecutándose. Podemos comprobar su salida consultando el archivo de registro de salida:
- sudo tail /var/log/idle.out.log
OutputSat Nov 20 22:21:22 UTC 2021Sat Nov 20 22:21:23 UTC 2021Sat Nov 20 22:21:24 UTC 2021Sat Nov 20 22:21:25 UTC 2021Sat Nov 20 22:21:26 UTC 2021Sat Nov 20 22:21:27 UTC 2021Sat Nov 20 22:21:28 UTC 2021Sat Nov 20 22:21:29 UTC 2021Sat Nov 20 22:21:30 UTC 2021Sat Nov 20 22:21:31 UTC 2021
A continuación, cubriremos otros usos de Supervisor.
Paso 3 – Administrar programas
Además de ejecutar programas, querrá detenerlos, reiniciarlos o ver su estado. El programa supervisorctl, que usamos en el paso 2 , también tiene un modo interactivo que podemos usar para controlar nuestros programas.
Para ingresar al modo interactivo, ejecute supervisorctl sin argumentos:
- sudo supervisorctl
Outputidle RUNNING pid 12614, uptime 1:49:37supervisor
supervisorctl
Inicialmente, imprimirá el estado y el tiempo de actividad de todos los programas configurados, seguido de su símbolo del sistema. Al ingresar, help
se mostrarán todos los comandos disponibles:
- supervisor help
Outputdefault commands (type help topic):=====================================add clear fg open quit remove restart start stop updateavail exit maintail pid reload reread shutdown status tail version
Puede hacerlo start
o stop
un programa con los comandos asociados seguidos del nombre del programa:
- supervisor stop idle
Outputidle: stopped
- supervisor start idle
Outputidle: started
Usando este tail
comando, puedes ver las entradas más recientes en los registros stdout y stderr de tu programa:
- supervisor tail idle
OutputSun Nov 21 00:36:10 UTC 2021Sun Nov 21 00:36:11 UTC 2021Sun Nov 21 00:36:12 UTC 2021Sun Nov 21 00:36:13 UTC 2021Sun Nov 21 00:36:14 UTC 2021Sun Nov 21 00:36:15 UTC 2021Sun Nov 21 00:36:17 UTC 2021
- supervisor tail idle stderr
Outputerror!error!error!error!error!error!error!
Usando status
puedes volver a ver el estado de ejecución actual de cada programa después de realizar cualquier cambio:
- supervisor status
Outputidle STOPPED Nov 21 01:07 AM
Finalmente, puedes salir de supervisorctl con Ctrl+C o ingresando quit
en el indicador:
- supervisor quit
Conclusión
En este tutorial, aprendió a instalar y administrar Supervisor. Como se mencionó, Supervisor es muy liviano según los estándares modernos, pero sigue recibiendo un buen mantenimiento y puede ser una herramienta útil para implementaciones más pequeñas. También es una forma autónoma y de bajo mantenimiento de generar registros como parte de un componente de una implementación más grande.
Si está ejecutando varias aplicaciones pequeñas que necesitan ser accesibles desde la web, es posible que también desee leer sobre cómo configurar Nginx como un proxy inverso , que es otro componente fundamental de las implementaciones pequeñas y reutilizables.
Deja una respuesta