Monitorando Processos com Supervisord
Conheça o Supervisord, um software que permite você monitorar e gerenciar processos em servidores de forma simples e eficiente
Quem trabalha com servidores sabe que cedo ou tarde terá que criar um script que rode em background e que não pare de ser executado em caso de falha ou reinicialização do servidor. Esse tipo de script é comum em gerenciamento de servidores web ou rotinas de backup automatizadas. As vezes processos do Apache, Nginx ou MySQL precisam ser monitorados constantemente para garantir que, em caso de falha, voltem a funcionar automaticamente.
Esse tipo de necessidade pode ser solucionado de várias formas, Upstart, systemd ou simplesmente usando o Supervisord. Nesse artigo vou abordar a forma mais simples que encontrei de rodar scripts em background no Linux e garantir que eles continuem funcionando mesmo após a reinicialização ou falha na execução.
Vamos imaginar a seguinte situação, bastante comum por sinal. Você possui uma droplet na DigitalOcean que roda um determinado site qualquer, você deseja que um determinado script consulte uma API constantemente. Uma solução seria criar uma entrada no crontab para que de tempos em tempos um arquivo PHP seja executado e a API consumida.
Mas o crontab só executa de tempos múltiplos de um minuto. O que fazer se você deseja que a API seja consultada a cada 5 segundos? Uma solução seria criar um script em PHP que realize a tarefa que você deseja e deixar o Supervisord cuidar do resto.
Nesse exemplo vamos criar um código em PHP que consulta uma API fictícia passando via GET alguns dados, e em seguida espera 5 segundos antes de finalizar sua execução. Como o Supervisord mantem sempre o processo rodando, quando meu script terminar a execução, o programa vai entender que ele parou de ser executado e vai reiniciar o processo. Obviamente isso leva alguns segundos, mas a título de exemplo, vamos supor que o código abaixo sempre será executado a cada 5 segundos.
O código acima será colocada em /home/webserver.php
e será usado durante nossos testes do Supervisord
Instalando o Supervisord
A instalação do Supervisord é semelhante a qualquer outro programa em sua droplet, basta digitar o comando abaixo para realizar a instalação.
Após instalar o Supervisord você pode iniciar o serviço do mesmo com o seguinte comando.
É importante lembrar que o programa em questão é totalmente personalizável. Para realizar o gerenciamento de um determinado processo, basta criar um arquivo .conf
com as configurações básicas para que o Supervisord saiba como lidar com o processo que você deseja monitorar.
Seguindo o padrão Linux, todas as configurações do software se encontram na pasta /etc/supervisord/
e seu arquivo de configuração base encontra-se em /etc/supervisord/supervisord.conf
ao editar o arquivo para visulizar seu conteúdo, nota-se a seguinte linha.
No código acima, pode-se observar que todo conteúdo da pasta /etc/supervisor/conf.d/
é incluído por padrão pelo software, desta forma basta criarmos um arquivo .conf
dentro de /etc/supervisor/conf.d/
para que o software já localize a nossa configuração e a inicie sem grandes problemas.
Agora que já sabemos onde criar nosso arquivo de configuração, vamos criá-lo de fato. Vamos criar um arquivo chamado webserver.conf dentro de /etc/supervisor/conf.d/
desta forma o caminho completo para nosso arquivo é /etc/supervisor/conf.d/webserver.conf
. Dentro do arquivo criado vamos colar o seguinte conteúdo.
Explicando o que cada comando acima faz:
[program:webserver]
- Aqui definimos o nome do comandocommand
- Aqui que definimos o comando para iniciar o nosso scriptdirectory
- Definimos o diretório para que o Supervisord iniciar, seria como se você desse um cd manual até esse diretório.autostart
- Ao definir como true o script será iniciado com o sistemaautorestart
- Ao definir como true o programa será reiniciado em caso de falhastartretries
- Define o número de vezes que o Supervisord deve tentar reiniciar o processo antes de desistir e dar como falhostderr_logfile
- Arquivo para log de errostdout_logfile
- Arquivo para log da saída padrãouser
- Usuário que o processo deve serenvironment
- Definimos variáveis de ambiente para serem passadas aos processos
Lembre-se que no exemplo anterior definimos uma saída de log para erros e para a saída padrão, por esse motivo precisamos criar o diretório que escolhemos (caso não exista). Por padrão o Supervisord não cria diretórios, por isso você precisa fazer isso manualmente através do comando abaixo.
Agora que aprendemos o que é o Supervisord e como configurá-lo, vamos aprender como usá-lo para controlar um processo. Primeiramente podemos ler as configurações do nosso Supervisord usando o comando supervisorctl
. Caso você altere as configurações do arquivo .conf
, basta executar os comandos abaixo para atualizar tudo.
Após executar os comandos acima, seu script deverá estar funcionando. Basta executar o comando supervisorctl
para obter a saída abaixo e confirmar que seu script está funcionando.
Sempre que você desejar conferir o status de seu script, basta executar o comando supervisorctl
que receberá a informação se eles se encontra sendo executado ou não no momento.
Se agora você deseja parar um processo que esteja sendo executado, basta executar o comando abaixo. Desta forma o processo será interrompido e sua execução pausada.
Caso deseje iniciar um processo basta executar o comando abaixo.
Com essas informações você já é capaz de gerenciar um processo em servidores Linux sem grandes problemas. Qualquer dúvida estamos à disposição.
Cadastre-se na DigitalOcean com Descontos!
Cadatre-se hoje mesmo na DigitalOcean e ganhe um cupom de $10 para iniciar os testes na plataforma