O que é o Supervisor?
O Supervisor é uma ferramenta poderosa desenvolvida em Python para o gerenciamento e controle de múltiplos processos em sistemas oepracionais do tipo Unix. Esta solução permite que administradores de sistema monitors, reiniciem e controlem diversos processos de forma centralizada, facilitando significativamente a manutenção de serviços e aplicações.
Componentes Principais
Supervisord (Servidor)
O componente servidor é conhecido como supervisord e possui as seguintes responsabilidades:
- Iniciar automaticamente os processos filhos管理ados durante sua própria inicialização
- Responder a comandos enviados pelos clientes
- Reiniciar processos que falham ou terminam inesperadamente
- Registrar a saída padrão (stdout) e erro (stderr) dos processos filhos
- Gerar e processar eventos relacionados ao ciclo de vida dos processos
A configuração do Supervisor é realizada através de um arquivo de configuração principal, geralmente localizado em /etc/supervisord.conf. Neste arquivo, é possível definir parâmetros tanto para o próprio servidora quanto para cada processo filho gerenciado.
Supervisorctl (Cliente)
O componente cliente é chamado de supervisorctl e oferece uma interface de linha de comando para interagir com o servidora. Através desta interface, os usuários podem:
- Conectar-se ao processo servidora do Supervisor
- Obter o status dos processos filhos
- Iniciar e parar processos individualmente
- Visualizar a lista de processos em execução
A comunicação entre cliente e servidor ocorre através de sockets de domínio Unix ou sockets TCP. O servidor possui mecanismos de autenticação para garantir segurança nas comunicações. Quando ambos estão na mesma máquina, compartilham o mesmo arquivo de configuração, distinguindo-se por meio de seções específicas.
Nota: O Supervisor funciona na maioria dos sistemas Unix, mas não possui suporte para Windows. Além disso, é compatível com Python 2.4 ou superior, não oferecendo suporte para Python 3.
Instalação do Supervisor
- Verifciar Ambiente Python
Caso não tenha o Python 2.x instalado, efetue a instalação:
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
tar -zxvf Python-2.7.9.tgz
cd Python-2.7.9
./configure --prefix=/usr/local/python-2.7.9
make && make install
- Obter o Pacote de Instalação
wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz
- Instalar Dependências
yum install python-setuptools-devel
- Compilar e Instalar
tar zxvf supervisor-3.1.3.tar.gz
cd supervisor-3.1.3
python setup.py install
Parâmetros de Configuração
O arquivo supervisord.conf aceita os seguintes parâmetros principais:
| Parâmetro | Descrição |
|---|---|
| command | Comando para iniciar o programa (caminho absoluto ou relativo) |
| process_name | Expressão Python que define o nome do proceso no Supervisor (padrão: %(program_name)s) |
| numprocs | Número de instâncias do programa a serem iniciadas. Se maior que 1, deve incluir %(process_num)s |
| numprocs_start | Valor inteiro de deslocamento para cálculo das instâncias |
| priority | Define a ordem de início e parada (valores menores iniciam primeiro e param por último) |
| autostart | Se verdadeiro, o processo inicia automaticamente com o Supervisor |
| autorestart | Define quando reiniciar: false, true ou unexpected |
| startsecs | Tempo de espera após o início para considerar sucesso |
| startretries | Número de tentativas de início antes de considerar falha |
| exitcodes | Códigos de saída esperados (padrão: 0, 2) |
| stopsignal | Sinal enviado ao processo quando solicitado parada (TERM, HUP, INT, QUIT, KILL, USR1, USR2) |
| stopwaitsecs | Tempo de espera pelo sinal SIGCHILD do sistema operacional |
| stopasgroup | Se verdadeiro, envia sinal para todo o grupo de processos |
| killasgroup | Se verdadeiro, envia SIGKILL para todo o grupo de processos |
| user | Usuário para executar o processo (se executando como root) |
| redirect_stderr | Se verdadeiro, direciona stderr para stdout |
| stdout_logfile | Caminho do arquivo de log de saída (AUTO para automático) |
| stdout_logfile_maxbytes | Tamanho máximo do arquivo de log antes da轮转 (KB, MB, GB) |
| stdout_logfile_backups | Número de backups保留dos arquivos de log |
| stderr_logfile | Caminho do arquivo de log de erros |
| environment | Lista de variáveis de ambiente em formato chave=valor |
| directory | Diretório de trabalho ao gerar o processo filho |
| umask | Máscara de permissões do processo |
Comandos Mais Utilizados
| Comando | Descrição |
|---|---|
| supervisorctl help | Exibir todos os comandos disponíveis |
| supervisorctl status | Listar todos os processos e seus status |
| supervisorctl update | Atualizar configuração sem reiniciar processos existentes |
| supervisorctl reload | Recarregar configuração e reiniciar todos os processos |
| supervisorctl start processo | Iniciar um processo específico |
| supervisorctl stop processo | Parar um processo específico |
| supervisorctl stop grupo | Parar todos os processos de um grupo |
| supervisorctl stop all | Parar todos os processos |
| supervisorctl reread | Reler配置文件 sem aplicar mudanças |