Chega de dor de cabeça e sofrimento, pare de ficar criando scripts na mão, startar, parar e controlar um determinado serviço ou processo. Conheça o
Supervisor!
Como descobri o Supervisor: tinha um servidor que executava vários websockets em node e python, e eu tinha que escrever um script de inicialização para cada um desses websockets, instalar forever rodar com nohup, as vezes o serviços caiam tinha que startar novamente, para dar manutenção nesses scripts gerava um transtorno enorme, enfim, era uma amolação insuportável. Foi aí que eu descobri o Supervisor e passei a ser mais feliz. :)
Uma breve descrição sobre o Supervisor, ele é uma aplicação capaz de gerenciar e monitorar de forma fácil e eficaz um determinado aplicativo ou processo, além de poupar de escrever um script de inicialização que muitas vezes pode conter falhas e não ser 100% eficaz. Para mais info:
Sem mais delongas, irei demonstrar dois exemplos de serviços sendo executados pelo supervisor, em um servidor
Debian Jessie.
Primeiro instale o supervisor.
# apt-get install supervisor
Navegue até pasta onde você criará as configurações de inicialização de seus processos e serviços e crie os arquivos de configuração do seu serviço:
# cd /etc/supervisor/conf.d
# touch app1.conf && app2.conf
Depois disso edite os arquivos de configurações recém-criados, segue um exemplo de configuração.
# vim app1.conf
[program:app1] #nome do serviço/processo
command = node /usr/src/app/index.js #comando que será executado
user = noboady #usuario que irá executar o serviço, nao é rocomendado utilizar o root
autostart = true #inicializa assim que o supervisor ligar
autorestart = true #se o serviço parar por algum motivo ele irá inicizaliar sozinho
environment=NODE_ENV=production
stdout_logfile = /var/log/supervisor/app1.log
stderr_logfile = /var/log/supervisor/app1.log
Agora o segundo exemplo:
# vim app2.conf
[program:app2]
command = /usr/bin/python ServerSocket.py #note que nao precisei passar o caminho todo por causa do diretorio base
directory = /usr/src/app/socket/ # diretorio base do meu serviço
user=nobody
autostart = true
autorestart = true
stdout_logfile = /usr/src/app/socket/app2.log
stderr_logfile = /usr/src/app/socket/app2.log
Feito isso, vamos ativá-los de fato e inicializá-los, execute:
# supervisorctl update
# supervisorctl start app1
# supervisorctl start app2
Irá retornar algo mais ou menos assim:
app1: added process group
app1: added process group
app1: started
app2: started
Para um teste final, localize o numero do processo que está rodando um do seus apps, e mate-o, note que o serviço irá iniciar automaticamente sozinho, com um pid diferente do antigo, isso é maravilhoso!
Pronto! Feito isso os 2 serviços já estão iniciados e estão sendo gerenciados pelo supervisor de forma simples e eficaz, sem dor de cabeça.
Gostou? Foi útil? Ajude a propagar esse conhecimento. Compartilhe!
Originalmente publicado em:
https://utilidadesvitais.wordpress.com/2016/07/01/gerenciando-servicos-com-o-supervisor/
legal, favoritei.
saberia me dizer se funciona para os serviços do systemd?
¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨¨
Albfneto,
Ribeirão Preto, S.P., Brasil.
Usuário Linux, Linux Counter: #479903.
Distros Favoritas: [i] Sabayon, Gentoo, OpenSUSE, Mageia e OpenMandriva[/i].