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:
- daemontools de Dan Bernstein
- freedt de Adam Sampson daemontools-encore de Bruce Guenter
- s6 de Laurent Bercot
- Meu nosh
- runit de Gerrit Pape
- perp de Wayne Marshall
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
e um arquivo
setuidgid nagios
nagiosrestart
que causa reinicialização automática incondicional:#!/bin/sh
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.
exec true - 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.
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:
-
nagios.service
de David Kowis para o Source Mage Linux -
nagios.service
adicionado a nagios do Arch Linux pacote em 2012
O systemd não vem com o comando shim service
, mas algumas distribuições do Linux possuem uma de outra fonte.