Gestión de procesos en Ubuntu 22.04 LTS con Supervisor

Supervisor es un sistema cliente/servidor que permite a sus usuarios monitorizar y controlar procesos en sistemas operativos tipo UNIX. Desarrollado en Python, esta herramienta convierte programas convencionales en demonios de fondo, garantizando su persistencia mediante el reinicio automático tras un cierre inesperado. Funciona mediante la técnica de fork/exec, gestionando las aplicaciones como procesos hijos, lo que permite al proceso padre (supervisord) capturar información precisa sobre el estado de ejecución y fallos de cada servicio.

1. Instalación del sistema

Para desplegar Supervisor en Ubuntu 22.04, se utiliza el gestor de paquetes estándar:

sudo apt update
sudo apt install supervisor -y

2. Estructura de archivos y rutas principales

Tras la instalación, el sistema organiza los componentes esenciales en las siguientes rutas:

  • Archivo de configuración principal: /etc/supervisor/supervisor.conf
  • Binario del servidor: /usr/bin/supervisord
  • Script de control de servicio: /etc/init.d/supervisor
  • Archivo de socket: /var/run/supervisor.sock
  • Identificador de proceso (PID): /var/run/supervisord.pid

3. Configuración del núcleo (supervisor.conf)

El archivo supervisor.conf define el comportamiento global del demonio. A continuación, se presenta una estructura optimizada:

[unix_http_server]
file=/var/run/supervisor.sock
chmod=0700

[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/var/run/supervisord.pid
childlogdir=/var/log/supervisor
nodaemon=false

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock

[include]
files = /etc/supervisor/conf.d/*.conf

4. Definición de servicios secundarios

Para gestionar una aplicación específica, como un servidor web o un worker de tareas, se crean archivos individuales en /etc/supervisor/conf.d/. Tomando como ejemplo un servicio denominado app-worker:

[program:app-worker]
# Ruta del ejecutable
command=/usr/bin/python3 /opt/app/main.py
# Directorio de trabajo
directory=/opt/app
# Usuario que ejecuta el proceso
user=www-data
# Comportamiento de inicio y reinicio
autostart=true
autorestart=true
startsecs=5
startretries=5
# Prioridad en la cola de arranque
priority=10
# Gestión de registros (logs)
stdout_logfile=/var/log/app/worker_access.log
stderr_logfile=/var/log/app/worker_error.log
stdout_logfile_maxbytes=15MB
stdout_logfile_backups=5
redirect_stderr=true

5. Control y ejecución del servicio

Una vez configurado, se debe iniciar el demonio principal de Supervisor:

sudo systemctl start supervisor
sudo systemctl enable supervisor

6. Comandos de administración de procesos

La herramienta supervisorctl permite interactuar con los procesos definidos mediante la línea de comandos:

  • supervisorctl status: Muestra el estado actual de todos los procesos gestionados.
  • supervisorctl start [nombre]: Inicia un proceso específico.
  • supervisorctl stop [nombre]: Detiene la ejecución de un proceso.
  • supervisorctl update: Lee las modificaciones en los archivos de configuración y aplica los cambios solo en los procesos modificados.
  • supervisorctl reload: Reinicia el servicio de Superviser por completo, aplicando todas las configuraciones nuevas.
  • supervisorctl restart all: Reinicia todos los procesos hijos sin detener el demonio principle.

Es posible acceder a una consola interactiva simplemente ejecutando supervisorctl sin argumentos adicionales, facilitando la gestión múltiple sin repetir el prefijo del comando.

Etiquetas: Ubuntu Supervisor DevOps linux-administration process-management

Publicado el 7-3 04:39