E se você pudesse controlar uma série de processos através de um comando? Ou de garantir que serviços “down” sejam reiniciados automaticamente? Ou ainda, agrupar seus serviços e poder reiniciá-los com um simples comando de terminal?
O Supervisor aparece para facilitar muito a vida de quem precisa administrar servidores Web, e não tem muito tempo a perder com criação de rotinas, ou mesmo com trabalho manual.
Afinal, o que é o Supervisor?
A proposta do Supervisor é simples: permitir que usuários possam controlar e monitorar processos (e grupos de processos) em um sistema Unix-like.
Em suma, o Supervisor é um programa escrito em Python, capaz de iniciar, reiniciar e parar outros programas. Mas, o que me chamou mais a atenção, é que ele é capaz de reiniciar programas “crashados” automaticamente.
Isso é possível pois, por baixo dos panos, o Supervisor é um serviço que inicia todos os demais como subprocessos. Desse modo, é capaz de monitorar o estado dos mesmos, e numa eventual “queda”, reiniciar um determinado processo/serviço imediatamente.
Ou seja, funciona como uma ferramenta centralizadora e de monitoramento. E que ainda serve uma API para gerenciamento remoto, através de XML-RPC.
Instalar para administrar
Para instalar, basta utilizar o pip:
$ pip install supervisor
Vamos gerar um arquivo de configuração básico:
$ echo_supervisord_conf > /etc/supervisord.conf
Vamos aproveitar que falamos recentemente sobre a instalação do Nginx, para demonstrar o princípio do Supervisor. Adicione as seguintes linhas ao arquivo /etc/supervisord.conf:
[program:nginx]
command=/usr/local/nginx/sbin/nginx
Agora iniciamos o serviço do Supervisor:
$ supervisord
E através do supervisorctl, vamos iniciar e parar o Nginx:
$ supervisorctl start all
nginx: started
$ ps aux | grep nginx
root 1863 0.0 0.1 (...) /usr/local/nginx/sbin/nginx
$ supervisorctl stop nginx
nginx: stopped
E agora, o “pulo do gato”. Com o Nginx iniciado via Supervisor, vamos fechá-lo através de um comando kill:
$ supervisorctl start nginx
nginx: started
$ killall nginx
$ ps aux | grep nginx
root 1917 0.0 0.1 (...) /usr/local/nginx/sbin/nginx
Magia? Que nada! É a ferramenta garantindo que os nossos processos não fiquem “down”. Brandon Konkle e Senko Rasic possuem exemplos utilizando um cenário real com Django e Nginx.
Considerações finais
Embora o Supervisor seja uma ferramenta espetacular, acredito que muitos profissionais já possuam intimidade com os seus servidores, bem como já tenham construído sets de scripts, e atalhos em geral. Isso, de fato, faz a gente questionar a utilidade dela.
A possibilidade de monitorar e garantir a disponibilidade dos processos foi o que mais me agradou. Se você tem “poderes administrativos” na sua hospedagem, talvez o Supervisor seja a ferramenta que faltava para você possa dormir mais tranquilo.