Como manter um aplicativo gráfico em execução, mesmo se ele falhar?

4

Eu uso o Gnome Do como um lançador para a maioria das coisas. Eu tenho que definir para executar no login e para a maior parte do tempo fica em segundo plano esperando por mim para mash um atalho de teclado. Cerca de uma vez por semana, cai. Eu amasso meu atalho e nada acontece. Tenho que reiniciá-lo.

Não é incrivelmente irritante, mas eu gostaria de saber se há boas maneiras de garantir que os aplicativos da área de trabalho continuem funcionando para sempre. Se eles morrerem, eles serão relançados (talvez com um tempo limite de travamento, por isso, se ele falhar durante o carregamento, ele não continuará tentando executá-lo repetidas vezes).

Eu sei que algumas aplicações fazem isso. No Gnome2, se o gnome-panel não estiver rodando, o sistema o força a carregar. Existe uma maneira simples de explorar essa lógica (é claro, sem quebrar o Gnome).

Eu não quero que essa pergunta seja muito específica para o Gnome Do ou mesmo para o Gnome porque tenho mais de um aplicativo para uma solução (eu executo o Boxee em uma área de trabalho OpenBox na nossa central multimídia) e tenho certeza que outras pessoas todos têm seus próprios problemas, eles gostariam de corrigir algo assim.

    
por Oli 06.06.2011 / 13:20

2 respostas

2

Outra solução não tão elegante:

#!/bin/bash

threshold=2
program=""

while true; do
    start=$(date +%s)
    "$program"
    ret_val=$?
    stop=$(date +%s)
    if [[ ret_val -eq 0 ]]; then
        # normal exit, quit
        exit 0
    else
        # abnormal exit, check runtime. if < threshold quit
        runtime=$((stop - start))
        if [[ runtime -lt $threshold ]]; then
            echo "crash on start"
            exit 1       
        fi
    fi
done

Isto irá reiniciar, se o programa (primeiro argumento) sair com um código de retorno! = 0 e executar pelo menos limite segundos.

Eu tentei criar um trabalho Upstart usando as opções respawn e respawn limit , mas isso de alguma forma falhou.

    
por htorque 06.06.2011 / 14:04
0

Uma solução simples, se não particularmente elegante, seria lançar o aplicativo a partir de um script no loop, de modo que

#!/bin/bash

while true
 do
    gnome-do # or application of choice
    sleep 10 # prevent super-spawn rates
done

Embora isso possa ter que ser verificado por aplicativo, como o bash não para todos os programas ...

Você também pode adaptá-lo para verificar códigos de erro, portanto, ele só reaparece se o aplicativo falhar, em vez de ser fechado.

    
por thomasmichaelwallace 06.06.2011 / 13:51