Post em Destaque

Acessar o Celular Android via Bluetooth no FreeBSD

    Este pequeno roteiro eu realizei utilizando o adaptador Bluetooth bem Xing-Ling da imagem abaixo.               O primeiro passo é verificar se os drivers necessários estão presentes no kernel. O meu sistema é este aqui: FreeBSD squitch 8.3-RELEASE-p4...

Leia mais...

Quando serviços ficam caindo… o que fazer até a solução chegar?

Postado por gondim | Categoria Dicas, FreeBSD | Dia 22-04-2012

Tags:, , ,

3

Serviços rodando não deveriam cair simplesmente do nada. Muitos deles informam a causa em seus logs ou tentam pelo menos dar uma dica do problema. Pode estar relacionado muitas das vezes com problemas de memória como os segfaults (signal 11) mas as vezes os segfaults podem indicar um bug na aplicação que em algum momento esta simplesmente fecha. O fato é que você precisa investigar o que esta causando o problema mas enquanto isso você precisa garantir que o serviço não pare. Existe uma ferramenta chamada daemontools que monitora um determinado serviço que desejar e se o mesmo cair, instantaneamente o daemontools trata de levantá-lo. É a famosa “gambiarra”.

Para instalarmos o daemontools farei com exemplo o serviço do radius, pois se este cair a autenticação de vários clientes parariam aqui no meu caso:

# cd /usr/ports/sysutils/daemontools

# make install clean distclean

Após instalarmos criaremos o diretório de monitoramento do nosso serviço de exemplo, o radius:

# mkdir -p /var/service/radius

Dentro desse diretório que criamos, você criará um arquivo chamado run com o seguinte conteúdo:

#!/bin/sh
exec fghack /usr/local/sbin/radiusd

Nesse caso o daemontools vai iniciar o /usr/local/sbin/radiusd. Não vamos habilitar o radius no /etc/rc.conf porque o próprio daemontools vai se encarregar de levantar o serviço. Veja que estou dando um exemplo com o radiusd mas que pode ser aplicado à outros serviços.

# chmod 755 /var/service/radius/run

Não podemos deixar de dar permissão de execução para o nosso script. O nome dele precisa ser run. Ok?

Se for monitorar outros serviços basta criar outros subdiretórios dentro do /var/service e os devidos arquivos run.

Para finalizarmos nosso exemplo colocamos a seguinte configuração no /etc/rc.conf:

svscan_enable=”YES”
svscan_servicedir=”/var/service”

Agora podemos iniciar o daemontools e quando fizermos isso, todos os serviços que ele estiver monitorando serão levantados:

# /usr/local/etc/rc.d/svscan start

Vejamos o que ele fez:

# ps afx|grep radius
1587  ??  I         0:00.12 supervise radius
35029  ??  I         0:00.00 fghack /usr/local/sbin/radiusd
35031  ??  Ss       57:22.67 /usr/local/sbin/radiusd

O PID 35031 é o nosso radius rodando propriamente dito, os outros são o daemontools fazendo seu papel. Se quiser fazer um teste basta fazer um kill -9 no 35031 e verá que o mesmo será levantado instantaneamente. 🙂

Bem é isso, be happy!

PS: Sempre verifique o motivo das quedas, veja nos logs, contate o mantenedor do port, busque a solução e não a gambiarra.  🙂

Share Button

Comments (3)

Rapaz muito bom !!! isso mesmo que eu queria aqui !!!!
Otimo Artigo.

Grato pela ajuda.

Show que ajudou. A idéia era essa. 🙂

Muito bom!

Já utilizei uma gambiarra destas com o monit (/usr/ports/sysutils/monit).

Bem legal tbm.. vc configura pra ele te mandar um email, se ele tentar restartar o serviço por tres vezes sem sucesso, ele para de monitorar porque se não o servidor vira um spamer.. rsrs

Write a comment

*