Alternativa ao Daemontools (djbtools) para supervisionar processos unix?

26

Eu usei o Daemontools para fornecer uma maneira simples e confiável de supervisionar os serviços Unix em meus servidores. Funciona bem, mas requer uma maneira diferente de pensar ( The DJB Way ) e algumas queixas comuns são:

  • Registros de data e hora baseados em TAI64N
  • Não armazena scripts em /etc/init.d (ou (/usr/local)/etc/rc.d)
  • Nem sempre funciona com scripts como apachectl. Alguns scripts precisam ser reescritos.

Lembro-me de que alguns daemons "supervisores / vigilantes" semelhantes estavam em andamento há cerca de dois anos, mas alguns ainda eram um pouco ásperos.

Se você mudou do Daemontools para outra coisa, o que você escolheu e funcionou bem para você? O RedHat ou Ubuntu vem com algum utilitário de supervisor de processo por padrão?

Stefan Lasiewski
fonte

Respostas:

16

Hrm, se você estiver usando o Ubuntu, o novo processo init, inicial , inclui um nível de supervisão de processo. Ele pode ser usado para iniciar e interromper serviços padrão, como scripts de inicialização do SysV, e também pode monitorar aplicativos em execução e reaparecê-los se eles morrerem.

Você também pode implementar o processo de reintrodução de um pobre homem via inittab, dependendo de quais são suas necessidades.

Se você está procurando principalmente algo para manter um olho em um processo, para garantir que ele esteja sempre em execução e, em seguida, reinicie-o quando não estiver, tive muita sorte com o restartd . Infelizmente, a única fonte que eu conheço é o pacote Debian. No entanto, é um aplicativo muito pequeno e simples, basicamente apenas um único arquivo .c e .h, com um arquivo make. Compilá-lo a partir do tarball de origem Debian no Red Hat é trivial (eu até fiz um RPM dele no meu trabalho anterior).

Uma opção final que eu ouvi falar, mas não usei, é o Supervisor . Parece uma ferramenta promissora, mas o restartd funcionou bem o suficiente para mim no passado, para o que eu precisava, que ainda não me preocupei em brincar com ela.

Christopher Cashell
fonte
12

+1 para runit. Mais recursos e flexíveis que daemontools, compatíveis com argumentos e opções existentes daemontools. Muito arrumado.

Porém, como você mencionou, muitas ferramentas vêm com seus próprios binários de controle, apache2ctl, ejabberdctl, poundctl, collectd, etc. possível implementação. Geralmente faço um compromisso e tenho a maioria dos serviços executados sob a supervisão de runit. E os outros podem ter permissão para executar usando a maneira trivial.

alcy
fonte
1
+1 Vale ressaltar que o runsvcomando de runitsuporta controles personalizados, para que uma reinicialização possa ser implementada em termos de binários de controle nativo de um daemon.
Pilcrow
4

Bem, há runit . Não sei dizer quais são suas diferenças e semelhanças com os daemontools, mas, a julgar pelo site de Berstein, eu diria que há uma influência definida de Bernstein.

Steven segunda-feira
fonte
2
Meu voto é para runit, já que você pode colocá-lo em um arranjo SysVInit e fazer com que ele assuma o /etc/init.d/ <scriptname> de forma bastante transparente.
Avery Payne
4

Como uma alternativa ao já mencionado daemonizee daemontools, existe o comando daemon do pacote libslack.

daemon é bastante configurável e se preocupa com todas as coisas tediosas do daemon, como reinicialização automática, log ou manipulação de arquivos de pid.

nazu
fonte
3

supervisord

ptman
fonte
3

Há também a ferramenta daemon do libslack, escrita em C e disponível para várias plataformas (Unix).

É bastante configurável e se preocupa com todas as coisas tediosas do daemon, como reinicialização automática, log ou manipulação de arquivos de pid.

Chade
fonte
2

O Ubuntu vem com o Upstart - eu não sei muito sobre isso, mas sei que possui recursos de "supervisor". O launchd da Apple é outra opção (que o artigo da Wikipedia possui uma boa seção "veja também" que lista muitos outros também, incluindo Upstart e RunIt).

Todos eles têm seus pontos positivos e sua própria marca especial de übersuck - sempre que alguém me pergunta sobre os programas "supervisor de processo" / "cão de guarda", sempre faço a mesma pergunta: por que você precisa de um?

voretaq7
fonte
-2

Não há ferramentas populares / de consenso da comunidade para isso, porque todos que seguem esse caminho percebem que é um beco sem saída. Se seus processos de longa execução falharem com frequência para que o monitoramento simples seja bom o suficiente, pare de usá-los e mova seu código para algo que será mais orientado a eventos.

edit: como Chris aponta abaixo, às vezes você está completamente encurralado; nesse caso, uma tarefa cron * / 1 que procura o processo / pidfile, executa um start / restart se estiver ausente e envia os resultados em um email para o responsável desenvolvedor / gerente de produto é a sua posição de substituto.

cagenut
fonte
3
Mais fácil falar do que fazer. ;-) Às vezes, você tem aplicativos que são forçados a executar, independentemente de quão instáveis ​​ou ruins possam ser, e tudo o que você pode fazer para mantê-los em funcionamento ajudará a reduzir as chamadas telefônicas às 3h. Não é o ideal, por qualquer meio, mas às vezes é o melhor possível.
22410 Christopher Cashell
1
Essas respostas perdem dois recursos dos supervisores de processador: a capacidade de gerenciar grupos de processos como uma única unidade e a capacidade de gerenciar dependências. Por exemplo, seu site pode envolver um servidor web, servidor de banco de dados e vários aplicativos web em execução como processos externos. Esses processos podem ter dependências - por exemplo, o banco de dados precisa estar ativo antes do aplicativo da web. Um bom supervisor de processo permitirá iniciar e parar esse grupo de processos com um único comando e garantirá que as coisas sejam iniciadas na ordem correta.
Larsks
1
Em um mundo ideal, tudo funcionaria perfeitamente. Infelizmente, este simplesmente não é um mundo ideal.
Matt
O problema não está falhando com muita frequência. O problema está falhando uma vez por semana e não está sendo reiniciado imediatamente . Esta não é uma resposta real.
Dan3
@ChristopherCashell está no caminho certo. A supervisão dentro de um aplicativo geralmente é um excesso de engenharia (e também não é a filosofia do UNIX). Pode-se presumir que o software sempre é imperfeito, não importa quanto esforço proativo seja aplicado para corrigir cada falha. A supervisão é uma camada externa distinta ... uma apólice de seguro. É melhor manter os serviços de produção, não importa o que aconteça, mesmo que não se deva travar, porque a realidade é sh% t acontece. Prefiro reiniciar o serviço, registre a exceção e corrija-a pela manhã. (Service batendo é outro caso a considerar.)