Eu quero ter um processo que será reiniciado se falhar. Pesquisei um pouco no Google e descobri que uma solução fácil é usar daemontools .
Não entendi como configurá-lo.
- Qual é a maneira mais fácil de realizar essa funcionalidade?
- Como configurá-lo?
Eu quero ter um processo que será reiniciado se falhar. Pesquisei um pouco no Google e descobri que uma solução fácil é usar daemontools .
Não entendi como configurá-lo.
Respostas:
Parece que você está procurando uma funcionalidade já fornecida no Ubuntu com Upstart . A respawnestrofe na configuração fará exatamente o que você precisa. Eu recomendaria contra o uso de uma maneira menos padrão 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 ele se bifurca e se coloca em segundo plano, por exemplo. A documentação do Upstart na respawnestrofe deve fornecer mais informações.
Infelizmente, ainda não é possível executar tarefas do usuário corretamente: não é possível iniciar o processo para executar tarefas do usuário
Vamos supor que queremos manter o aplicativo Calculadora em execução, mesmo quando ele está sendo morto com fogo (sinal 9).
Crie um arquivo de configuração em /etc/init/calculator.conf(com base neste 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
Inicie executando
sudo start calculator
Ele abre na tela atual ( :0) e desfruta da grandiosidade vendo-a reiniciar após fechá-la.
Identifique o ID do processo, por exemplo, fazendo ps aux | grep calculator:
gert 13695 0.2 0.4 349744 16460 ? Sl 13:38 0:00 /usr/bin/gnome-calculator
Matá-lo com fogo.
sudo kill -9 13695
Assista reaparecendo:
gert 16059 4.6 0.4 349736 16448 ? Sl 13:40 0:00 /usr/bin/gnome-calculator
Observe que isso ficará mais elegante com os planos para os planos Ubuntu 13.04, com o suporte adequado ao Job User.
servicename.confdeve corresponder ao comando para iniciar start servicename. Eu suspeito que você escolheu um nome diferente.
Uma ferramenta extremamente simples que pode obter o mesmo efeito sem a necessidade de configuração é immortal: https://immortal.run/
Simplesmente execute o comando assim:
immortal <cmd>
Ele será executado em segundo plano e reiniciado automaticamente se sair.
immortalctl: Exibe o status dos trabalhos em execução. Há uma namecoluna que será impressa aqui, você pode usar isso para se referir ao trabalho com outros comandos de controle.immortalctl stop <name>: Interrompe o monitoramento do trabalho com o nome fornecido (ele não será reiniciado automaticamente, mas o processo atual continuará sendo executado)immortalctl -k <name>: Envia SIGKILL para o processo atual.immortalctl exit <name>: Interrompe o monitoramento do trabalho com o nome fornecido e o remove da lista de trabalhos.stdoute stderrem primeiro plano?
immortalctl -l out.log <cmd> && tail -f out.logpara obter o mesmo efeito.
Se você não precisar da funcionalidade do processo daemon / service / background e quiser fazê-lo no console, crie um arquivo chamado autorestart.sh:
#!/bin/bash
while [ 1 ]; do
some_command
done
Em seguida ./autorestart.sh, reiniciará automaticamente some_commandse sair ou travar. CTRL-C interrompe o loop e fecha o programa corretamente.
Testado no Ubuntu 18.04.
Existe uma maneira sem "Upstart". A palavra-chave é "inittab" :-). Embora esse arquivo normalmente não seja alterado do padrão, ele pode ser usado para obter o respawning desejado nas máquinas SYSV.
O ps-watcher é uma ferramenta que observa quais processos estão em execução e executa uma ação em circunstâncias definidas. Vamos instalá-lo:
apt-get install ps-watcher
Veja a parte inferior do HHVM em execução com fallback do PHP-FPM para obter detalhes - isso funcionou bem para mim.
Os processos de inicialização e reaparecimento são gerenciados pelo "systemd" desde o Ubuntu 15.04, uma boa introdução pode ser encontrada aqui
um exemplo de introdução está disponível em
https://www.devdungeon.com/content/creating-systemd-service-files
Essa abordagem substitui as mais antigas com base no / etc / inittab e no inicio.