Supervisor – Sistema de control de procesos

  
9 de Diciembre de 2014   0  

Cuando vamos avanzando en el mundo de la programación y nos envolvemos en el lado Backend de los proyectos, debemos aprender a trabajar con sistemas operativos basados en UNIX (Mac, Linux, FreBSD, Solaris, etc) y conocer técnicas para el levantamiento de servicios que son requeridos para una correcta funcionalidad de nuestro proyecto. A menudo nos topamos con librerías que necesitan ser ejecutadas en consola como por ejemplo: Celery, Tornado, Gunicorn, entre otros, y es tedioso iniciarlas cada vez que nuestro equipo enciende ya que si cerramos la terminal, el proceso también se detiene.

 

Pues bien, si te sientes identificado con lo que te acabo de contar, el día de hoy te traigo una solución, y su nombre es “Supervisor”.

¿Qué es supervisor?
computer-programmer

Supervisor es un sistema cliente / servidor que permite a sus usuarios monitorear y controlar una serie de procesos en los sistemas operativos UNIX. Supervisor está destinado a ser utilizado para el control de los procesos relacionados con un proyecto o un cliente, y está destinado a iniciar como cualquier otro programa en el arranque. Alguna de sus características son:

Precisión.

A menudo es difícil conocer si un proceso se encuentra arriba o abajo en UNIX y en ocasiones Pidfiles pueden equivocarse.  Supervisord inicia los procesos como subprocesos, por lo que siempre sabe si se encuentra arriba o abajo de los “children” y puede ser consultados los datos a conveniencia.

Grupo de procesos.

Los procesos a menudo necesitan ser iniciados y detenidos en grupos, a veces incluso en una “orden de prioridad”. 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”, lo que permite iniciarlos en el orden de prioridad asignado previamente. Además, los procesos se pueden agrupar en “grupos de procesos” y un “conjunto de procesos relacionados lógicamente” pueden ser detenidos e iniciados como una unidad o un solo proceso.

Eficiente.

Supervisor inicia sus subprocesos vía fork/exec y éstos no se convierte en “daemons”. El sistema operativo indica a Supervisor inmediatamente cuando un proceso termina, a diferencia de otras soluciones que se basan en archivo PID que periodicamente realizan un sondeo para saber si un proceso ha fallado.

Compatible.

Supervisor funciona en casi todo, 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.

Instalación.

Pues ya hemos leido que se encuentra desarrollado completamente en Python, por lo tanto se encuentra disponible en los repositorios de pypi. Gracias a ello podemos instalarlo facilmente ejecutando el siguiente comando en terminal:

1
$ sudo pip install supervisor

Ejemplo de uso.

Vamos a suponer que necesitamos correr Gunicorn como un subproceso en nuestro sistema. El archivo de configuración sería similar a:

1
2
3
4
5
6
[program:gunicorn]
command=/usr/local/bin/gunicorn main:application -c /path/project/gunicorn.conf.py
directory=/path/to/project
user=nobody
autorestart=true
redirect_stderr=true
Resumen.

A mi punto de vista, Supervisor es una gran herramienta cuando nos encontramos en la necesidad de ejecutar procesos en segundo plano. Yo lo he utilizado en producción para liberar servicios como Celery, Celery Beat y Gunicorn.

Si desean conocer más de esta grandiosa librería, te invito a visitar http://supervisord.org/.



Alex Dzul

FullStack Python / Django Developer. #jslove

Etiquetas

Temas relacionados