Gerenciando serviços com o Supervisor

Publicado por Caio Henrique Oliveira Rodrigues em 11/07/2016

[ Hits: 17.398 ]

 


Gerenciando serviços com o Supervisor



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!
Linux: Gerenciando serviços com o Supervisor
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/

Outras dicas deste autor
Nenhuma dica encontrada.
Leitura recomendada

Melhorando o visual do VIM (Vi Improved)

Skype no Antergos (Arch Linux)

Resolvendo bug de trocar avatar e enviar arquivos do aMSN 0.97

Todos os meus programas para Slackware i686

Lance seus aplicativos de maneira fácil e rápida!

  

Comentários
[1] Comentário enviado por albfneto em 12/07/2016 - 17:07h

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].

[2] Comentário enviado por caiorodrigues em 12/07/2016 - 18:39h


[1] Comentário enviado por albfneto em 12/07/2016 - 17:07h

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].


Obrigado!
Cara, não vejo o porque de não funcionar, é só configurar bem direitinho com os parâmetros e variáveis certos



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts