O Supervisor é um sistema cliente/servidor que permite que os usuários monitorem e controlem inúmeros processos em sistema operacionais UNIX-like.
Ele possui alguns objetivos de programas similares, como o launchd, daemontools e runit. Mas diferente destes, ele não pretende ser um substituto ao init, pelo contrário, ele inicia na inicialização do sistema como qualquer outro aplicativo.
Lembra aquela aplicação Python ou Node.JS que você fez e precisa deixar executando 24 horas por dia e ainda tem que iniciar junto com o boot? Quem nunca fez uma aplicação nesse estilo e tentou fazer um shell para iniciar um daemon.
Fazer algo assim é perda de tempo na minha opinião e sempre gera algum transtorno. A forma mais simples e segura que encontrei de automatizar esta tarefa é usando o Supervisor.
Com ele você controla quando iniciar e parar a aplicação, além de uma série de outras configurações.
Instalação
Algumas distribuições Linux oferecem a instalação do Supervisor pelo gerenciador de pacotes. Para garantir que instalaremos a versão mais recente, vou utilizar a versão disponível via pip. O pip é o gerenciador de pacotes do Python.
Antes de instalar, vamos garantir que temos os pacotes necessários para o uso do pip, para isso execute o comando abaixo:
sudo yum install python-setuptools python-pip
Após instalar o pip e suas dependências, vamos a instalação do Supervisor. Para isso execute o comando abaixo:
sudo pip install supervisor
Agora que ele está instalado, necessitamos configurá-lo e criar o arquivo de entrada para o Systemd.
Para criar o arquivo de configuração padrão execute o comando abaixo:
sudo echo_supervisord_conf > /etc/supervisord.conf
Após, vamos criar a entrada para o Systemd. O arquivo deve ser /usr/lib/systemd/system/supervisord.service e seu conteúdo será o abaixo:
[Unit]
Description=Supervisor Daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
Este arquivo foi testado no CentOS com Systemd, caso você deseja utilizar em outra distribuição recomento procurar um script compatível com a sua distro. Você pode encontrar vários arquivos de configuração aqui.
Agora que está tudo configurado, vamos iniciar o serviço com o comando abaixo:
sudo systemctl start supervisord
Vamos verificar se tudo ocorreu bem, para isto execute o comando abaixo:
sudo supervisorctl status
Para iniciar o Supervisor no boot, basta executar o comando:
sudo systemctl enable supervisord
Adicionado aplicações
Por fim, para adicionar um programa ao Supervisor é necessário editar o arquivo /etc/supervisord.conf. Procure pela entrada [program:theprogramname] e substitua ela pela aplicação que você deseja.
No exemplo abaixo você pode observar como eu deixo o Gistfy no ar. Este é o comando mais básico e obrigatório. Existem outras configurações, como logs e controles em caso de erros.
[program:gistfy]
command=node /home/gistfy/src/gistfy.js --port=5000 --base_url=//gistfy-app.herokuapp.com
Confira a documentação para entender melhor todos os parâmetros.
Agora para iniciar nossa aplicação, executamos o seguinte comando:
sudo supervisorctl start gistfy
Com o Supervisor você pode controlar vários aplicativos ao mesmo tempo de uma forma muito simples. Ele também oferece uma interface Web para monitoramento das aplicações, que pode ser habilitada facilmente no arquivo de configurações.
Espero que este artigo tenha sido útil, não esqueça de deixar o seu comentário.