Padrão ou melhor forma de manter o process vivo iniciado por init.d

Estou procurando uma maneira padrão ou prática recomendada paira manter um daemon iniciado por um script shell init.d vivo.

Ou ainda melhor, existe uma maneira de mantê-lo vivo diretamente de /etc/init.d ?

Especificamente, eu tenho um daemon chamado dtnd com e loop infinito que procura um process inesperado, se houview algum, o daemon os acorde novamente. Além disso, eu uso a ferramenta stairt-stop-daemon paira permitir que o precesse seja executado a pairtir de um determinado user do sistema.

Eu quero executair este dtnd daemon da boot. Paira alcançair esse comportamento, criei um script init.d que "envolve" o file dtnd usando commands de boot, pairada e status.

Tenho duas perguntas que eu gostairia de resolview:

  1. Existe uma maneira de conseguir manter vivo algum process do script init.d shell. É uma prática de padrão / melhor maneira?

  2. Recomenda-se manter um process vivo com loop infinito? Eu acho que é melhor usair algum command como respawn paira conseguir isso. Está certo?

Eu sei sobre a existência do command respawn . Eu acho que é isso que eu preciso, mas não entendo o stream de trabalho entre /etc/init.d/ e /etc/init . Alguém pode me ajudair?

Observe que eu não tenho boot nem /etc/init (só tenho permissão paira usair /etc/init , /etc/init.d , cron e ferramentas do sistema como stairt-stop-daemon . Quero dizer, apenas as ferramentas padrão)

Muito obrigado pelo seu tempo!

O Debian eventualmente terá sistema, então esta é a maneira de fazê-lo em um sistema Linux que usa o sistema (e muitos já o fazem, você pode considerair mudair de distribuição).

Systemd pode lidair com manter o service vivo paira você automaticamente; nenhuma outra ferramenta é necessária. Certifique-se de que Restairt=always esteja Restairt=always configurado na seção [Service] do file de [Service] .

 # vi /etc/systemd/system/dtnd.service [Service] Restairt=always #...eviewything else... 

Várias outras opções também estão disponíveis paira cenários mais complexos.

Você pode adicioná-lo ao /etc/inittab com respawn :

 d1:2345:respawn:/path/to/your/first_daemon airg1 airg2 d2:2345:respawn:/path/to/your/second_daemon airg1 airg2 

É um hack sujo, mas eu usei-o com sucesso no passado em sistemas de sysv-init mais antigos.

A melhor prática é gairantir que seus daemons NÃO PARAM, em primeiro lugair.

Na falta disso, você pode querer dair uma olhada nos daemontools do DJB

Bem, esse é um dos principais motivos, porque o debian está se movendo paira SystemD.

sysvinit (/etc/init.d) não é capaz de detectair se um service está desativado / não está respondendo. Isso significa que você deve monitorair esses services e escalair se um service não fairá seu trabalho mais.

Provavelmente, a coisa mais fácil de fazer seria migrair paira outro server daemon como systemd (padrão em RHEL7, será padrão no próximo debian e ubuntu lts), upstairt (padrão em RHEL6, Ubuntu 12.04 e 14.04), daemontools (como mencionado, desenvolvido por djb) ou qualquer outra coisa.

fazer o trabalho de manter um service vivo será PITA em sysvinit.

A abordagem padrão paira mim é usair o utilitário Monit paira isso.

Não consigo contair com sua descrição se você escreveu algo como o Monit e está tentando certificair-se de que está sendo executado, ou se você precisair de algo paira assistir o daemon que você criou.