Como supervisionar e reiniciar automaticamente um processo?

32

Eu quero ter um processo que será reiniciado se ele falhar. Eu pesquisei um pouco e descobri que uma solução fácil é usar daemontools .

Eu não entendi como configurá-lo.

  1. Qual é a maneira mais fácil de realizar essa funcionalidade?
  2. Como configurá-lo?
por opc0de 05.02.2013 / 13:02

5 respostas

26

Esta resposta aplica-se às versões do Ubuntu com o Upstart (< = 14.10). Use outra abordagem para versões com Systemd (> = 15.04).

Parece que você está procurando uma funcionalidade já fornecida no Ubuntu com Upstart . A sub-rotina respawn na configuração fará exatamente o que você precisa. Eu recomendaria contra o uso de uma maneira menos padronizada de lidar com isso.

Sem mais detalhes sobre o processo que você está tentando gerenciar, é difícil dizer como deve ser a configuração. Depende se se bifurca e se coloca em segundo plano, por exemplo. A documentação do Upstart na sub-rotina respawn deve lhe dar mais informações.

Infelizmente, ainda não é possível executar corretamente os Trabalhos do usuário: não é possível obter o início para executar o trabalho do usuário

Exemplo

Vamos supor que queremos manter o aplicativo Calculadora em execução, mesmo quando ele estiver sendo eliminado com fogo (sinal 9).

  1. Crie um arquivo de configuração em /etc/init/calculator.conf (com base em este artigo ):

    #!upstart
    description "Calculator"
    
    # Start job via the daemon control script. Replace "gert" with your username.
    exec su -l gert -c 'export DISPLAY=:0; /usr/bin/gnome-calculator'
    
    # Restart the process if it dies with a signal
    # or exit code not given by the 'normal exit' stanza.
    respawn
    
    # Give up if restart occurs 10 times in 90 seconds.
    respawn limit 10 90
    
  2. Inicie executando

    sudo start calculator
    
  3. Ele abre em sua exibição atual ( :0 ) e aproveita a grandiosidade ao vê-lo reiniciar depois de fechá-lo.

    • Identifique o ID do processo, por ex. fazendo ps aux | grep calculator :

      gert  13695 0.2 0.4 349744 16460 ?   Sl   13:38   0:00 /usr/bin/gnome-calculator
      
    • Mate-o com fogo.

      sudo kill -9 13695
      
    • Assista a reaparecer:

      gert  16059 4.6 0.4 349736 16448 ?   Sl   13:40   0:00 /usr/bin/gnome-calculator
      

Observe que isso será mais elegante com os planos para os planos do Ubuntu 13.04 com suporte apropriado ao Job do Usuário.

    
por gertvdijk 05.02.2013 / 13:11
12

Uma ferramenta extremamente simples que pode realizar o mesmo efeito sem precisar de configuração é immortal : link

Basta executar o comando assim:

immortal <cmd>

Ele será executado em segundo plano e será reiniciado automaticamente se sair.

  • immortalctl : exibe o status dos trabalhos em execução. Há uma coluna name que será impressa aqui, você pode usar isso para se referir ao trabalho com outros comandos de controle.
  • immortalctl stop <name> : Pára o monitoramento do trabalho com o nome dado (ele não será reiniciado automaticamente, mas o processo atual continuará a ser executado)
  • immortalctl -k <name> : Envia SIGKILL para o processo atual.
  • immortalctl exit <name> : Pára o monitoramento do trabalho com o nome fornecido e o remove da lista de trabalhos.
por extropic-engine 16.05.2017 / 20:58
0

Existe uma maneira sem "Upstart". A palavra chave é "inittab" :-). Embora esse arquivo não seja normalmente alterado do padrão, ele pode ser usado para obter o respawnning desejado em máquinas SYSV.

    
por cepal67 15.06.2015 / 18:08
0

O ps-watcher é uma ferramenta que observa quais processos estão sendo executados e executa uma ação em circunstâncias definidas. Vamos instalá-lo:

apt-get install ps-watcher

Veja a parte inferior de Executando o HHVM com fallback para o PHP-FPM para obter detalhes - isso funcionou bem para mim.

    
por Firegarden 19.09.2017 / 03:33
0

Os processos de inicialização e reabertura são gerenciados por "systemd" desde o Ubuntu 15.04, uma boa introdução pode ser encontrada aqui

link

um exemplo que você começou está disponível em

link

Esta abordagem substitui as mais antigas baseadas em / etc / inittab e upstart.

    
por Nikolaus Correll 04.07.2018 / 17:24