Esta resposta se aplica às versões do Ubuntu com 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 respawn
estrofe 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 respawn
estrofe 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
Exemplo
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.conf
deve corresponder ao comando para iniciarstart 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á umaname
coluna 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.fonte
stdout
estderr
em primeiro plano?immortalctl -l out.log <cmd> && tail -f out.log
para 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
:Em seguida
./autorestart.sh
, reiniciará automaticamentesome_command
se sair ou travar. CTRL-C interrompe o loop e fecha o programa corretamente.Testado no Ubuntu 18.04.
fonte
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.
fonte
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:
Veja a parte inferior do HHVM em execução com fallback do PHP-FPM para obter detalhes - isso funcionou bem para mim.
fonte
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
https://www.digitalocean.com/community/tutorials/systemd-essentials-working-with-services-units-and-the-journal
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.
fonte