Supervisor: Gerenciamento e Solução de Problemas de Processos

Gerenciar processos em segundo plano de forma confiável é crucial para a estabilidade de qualquer aplicação. O Supervisor surge como uma solução robusta para garantir que seus processos estejam sempre ativos e acessíveis.

Por Que Utilizar o Supervisor?

Imagine um cenário onde um script crítico para o seu negócio, como um processador de pagamentos, falha inesperadamente enquanto você está indisponível. Nesses momentos, uma ferramenta de supervisão de processos atua como um guardião incansável. O Supervisor, escrito em Python, transforma processos comuns em serviços resilientes e autogerenciáveis.

Comparado a métodos tradicionais como nohup ou systemd, o Supervisor oferece vantagens significativas:

  • Reinicialização Automática: Se um processo falhar, o Supervisor o reinicia automaticamente, garantindo a continuidade do serviço.
  • Gerenciamento Centralizado: Permite monitorar e controlar múltiplos processos a partir de uma única interface, simplificando a administração.
  • Monitoramento de Status e Logs: Fornece visibilidade em tempo real sobre o estado dos processos e seus logs, agilizando a identificação e resolução de problemas.

Experiências passadas com falhas de processos em produção destacam a importância de tais ferramentas. Incidentes, como a falha de um script de sincronização de estoque durante um período de alta demanda, podem levar a perdas significativas se não forem detectados e corrigidos rapidamente.

Configuração Inicial do Supervisor

Instalação

Em sistemas baseados em Debian/Ubuntu, a instalação é direta:


sudo apt update
sudo apt install -y supervisor

Para outras distribuições ou para garantir a versão mais recente, o uso do pip é recomendado:


pip install supervisor

Em ambientes Docker, integre o Supervisor diretamente na imagem base:


FROM ubuntu:20.04
RUN apt-get update && apt-get install -y supervisor \
    && mkdir -p /var/log/supervisor \
    && mkdir -p /etc/supervisor/conf.d
COPY supervisord.conf /etc/supervisor/supervisord.conf
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisor/supervisord.conf"]

Estrutura do Arquivo de Configuração

O arquivo principal de configuração do Supervisor geralmente se encontra em /etc/supervisor/supervisord.conf. É uma boa prática gerar um arquivo de configuração padrão e personalizá-lo:


echo_supervisord_conf > /etc/supervisor/supervisord.conf

A configuração é dividida em seções:

  • [unix_http_server]: Configura o socket para comunicação com o Supervisor.
  • [inet_http_server]: Define o servidor HTTP para acesso à interface web (ajuste a porta conforme necessário).
  • [supervisord]: Parâmetros globais do processo Supervisor, como logs e PID.
  • [include]: Diretório onde as configurações específicas dos programas serão colocadas.

Parâmetros comumente ajustados incluem:


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

[inet_http_server]
port=0.0.0.0:9001
username=admin
password=your_strong_password

[supervisord]
logfile=/var/log/supervisor/supervisord.log
logfile_maxbytes=50MB
logfile_backups=10

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

Gerenciando seu Primeiro Processo

Para supervisionar um simples servidor web Python, crie um arquivo de configuração em /etc/supervisor/conf.d/webapp.conf:


[program:webapp]
command=/usr/bin/python3 /opt/webapp/app.py
directory=/opt/webapp
user=www-data
autostart=true
autorestart=true
stderr_logfile=/var/log/webapp.err.log
stdout_logfile=/var/log/webapp.out.log
environment=PYTHONPATH="/opt/webapp"

Pontos importantes a serem observados:

  • O comando especificado na diretiva command deve executar o processo em primeiro plano (sem & ou nohup).
  • Utilize um usuário com privilégios mínimos para executar a aplicação.
  • Garanta que o diretório de logs exista e tenha permissões de escrita adequadas.

Após criar ou modificar a configuração, aplique as alterações:


sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl status

Comandos Essenciais do Supervisorctl

O utilitário supervisorctl é a ferramenta principal para interagir com o Superviosr:

Verificar o status de todos os processos gerenciados:


supervisorctl status

Iniciar, parar ou reiniciar um processo específico:


supervisorctl start webapp
supervisorctl stop webapp
supervisorctl restart webapp

Gerenciar todos os processos:


supervisorctl stop all
supervisorctl start all

Recarregar a configuração do Supervisor:


supervisorctl reload

Tags: supervisor Python gerenciamento de processos Monitoramento Alta Disponibilidade

Publicado em 8-10 12:22