Manter o controle do status do serviço continuamente

2

Eu preciso monitorar o status de nagios service (porque, sempre que eu faço alterações na configuração e aplico a nova configuração, eu encontraria nagios service interrompido). Se encontrado no estado 'parado', deve começar automaticamente.

Eu tentei escrever um pequeno script de shell e adicioná-lo a cron , mas descobri que o script seria executado toda vez mesmo que o serviço estivesse em execução. O script é:

#!/bin/bash

service nagios status | grep running

if [ $? -ne 0 ]
then
        service nagios start
fi

Sempre que o serviço estiver no estado 'parado', a saída de service nagios status mostrará No lock file found in /usr/local/nagios/var/nagios.lock . Devo monitorar o arquivo /usr/local/nagios/var/nagios.lock usando inotify-tools ou existe alguma alternativa melhor para isso?

    
por Mandar Shinde 14.01.2015 / 05:57

1 resposta

1

is there some better alternative to this?

Sim. Use um gerenciador de serviços adequado e descarte esse script /etc/init.d/nagios . Na melhor das hipóteses, você está usando um script do System 5 rc no modo de compatibilidade em algo como upstart ou systemd. Nesse caso, você não obterá alguns dos mecanismos úteis de gerenciamento de serviço que não estão disponíveis no modo de compatibilidade como essa pessoa no AskFedora não . Na pior das hipóteses, você está executando coisas em System 5 rc e você realmente não tem a esperança de fazer um gerenciamento de serviço decente com esse script.

Existem muitos sistemas de gerenciamento de serviços disponíveis. Eu não vou entrar nos detalhes de instalá-los, porque isso está muito além do escopo desta resposta. Em vez disso, vou me concentrar apenas em como obter o nagios daemon funcionando dentro deles.

A família daemontools

A família daemontools de conjuntos de ferramentas de gerenciamento de serviços inclui:

A principal coisa que você precisa aqui é um programa que se torne o daemon. Para nagios, este é um 2- ou 3-liner. Pode-se misturar e combinar os conjuntos de ferramentas. Aqui estão alguns 2 liners adequados, usando vários conjuntos de ferramentas diferentes:

  • Um arquivo run com o conjunto de ferramentas nosh:
    #!/bin/nosh
    setuidgid nagios
    nagios
    e um arquivo restart que causa reinicialização automática incondicional:
    #!/bin/sh
    exec true
    Apenas para pontapés, incluí um pacote de serviços pré-compilado para nagios to nosh, que estará disponível na versão 1.13, que é basicamente isso com alguns recursos padrão, como informações de dependência.
  • Um arquivo run com o conjunto de ferramentas runit:
    #!/bin/sh -e
    exec chpst -u nagios nagios
  • Um arquivo run com o conjunto de ferramentas s6:
    #!/command/execlineb -P
    s6-setuidgid nagios
    nagios
  • Um arquivo run com os conjuntos de ferramentas daemontools, daemontools-encore ou freedt:
    #!/bin/sh -e
    exec setuidgid nagios nagios
  • Um arquivo rc.main com o conjunto de ferramentas de perp:
    #!/bin/sh -e
    exec 2>&1
    start() { exec runuid nagios nagios; }
    reset() { exit 0; }
    eval "$1" "$@"

Este programa para executar o serviço individual é a única coisa específica deste serviço. O resto não varia de serviço para serviço. Um deles consulta o status do serviço da mesma forma em todos os serviços, com um comando como svstat . Ativar e desativar a inicialização automática no bootstrap é uma questão de links simbólicos. Iniciar e parar manualmente um serviço é uma questão de svc -u e svc -d . E assim por diante.

O

nosh tem vários shims se precisar deles, como systemctl status e initctl status . É importante ressaltar que ele tem um service shim, então, se você realmente gostar de service nagios status , pode continuar usando-o. ☺ Mas esqueça todo esse desagradável olhar para um negócio de lockfile, e toda a noção de monitoramento ad-hoc. Você não lida com nada assim com um gerente de serviço adequado. O gerente de serviço faz o monitoramento e mantém o controle adequado do processo do daemon.

systemd

Não existe um arquivo de unidade de serviço systemd para nagios que vem na caixa. Mas muitas pessoas já escreveram as suas próprias:

O systemd não vem com o comando shim service , mas algumas distribuições do Linux possuem uma de outra fonte.

Leitura adicional

por 19.01.2015 / 01:23