É possível escrever scripts de serviço portáveis para controlar um daemon?

7

Eu (ou um dos meus colegas) preciso escrever um ou mais scripts de shell para controlar a execução de um daemon. Precisamos ser capazes de iniciar o daemon, dizer para desligar e forçar um desligamento. Basicamente, é o tipo de coisa que alguém tradicionalmente usaria um script em /etc/init.d para.

Nós estaremos implantando para o Ubuntu. Podemos querer implantar no RedHat / CentOS e possivelmente no AIX. Eu gostaria de ter a capacidade de implantar em qualquer unix, porque eu gosto de fazer as coisas de forma portável.

Então, é possível escrever scripts de serviço portáveis?

Suponho que posso escrever um script de shell Bourne portátil que funciona como um script init.d normal e aceita 'start' e 'stop' como comandos. Isso funcionaria em qualquer lugar e ofereceria uma interface natural em pelo menos sistemas de estilo Debian e RedHat. Ele se encaixaria em outro lugar? O init.d universal? Há alguma armadilha a ser observada?

Existe alguma ferramenta para gerar scripts de serviço em diferentes formas? Algo em que posso escrever fragmentos de script para iniciar e parar e fazer com que a ferramenta produza scripts para várias plataformas diferentes.

Existem alternativas às convenções de script de serviço específicas da plataforma? Eu me deparei com daemontools e runit ; Estas são alternativas aos scripts init.d? Eles são bons? O que mais há assim?

Isso faz algum sentido?

    
por Tom Anderson 29.02.2012 / 19:35

1 resposta

1

É possível escrevê-los de uma maneira que não dependa dos detalhes específicos da distribuição, mas nem todos os serviços de inicialização * nix da mesma maneira. Não tenho certeza sobre o AIX, mas o Solaris, por exemplo, nem usa o sysvinit, mas usa o smf.

O CentOS / RHEL normalmente usa o /etc/rc.d/functions para auxiliar nas funções comuns do script init, enquanto o Debian usa um binário chamado daemon start-stop. Esse é provavelmente um dos motivos pelos quais os scripts init geralmente não são encontrados nos pacotes upstream.

Pessoalmente, eu iria escrever um script de inicialização para cada sistema operacional suportado, para ser incluído no pacote do sistema operacional.

    
por 29.02.2012 / 21:51