Come mantenere in esecuzione un'applicazione grafica, anche se si blocca?

4

Uso Gnome Do come launcher per molte cose. L'ho impostato per l'accesso al login e per la maggior parte del tempo si trova in background in attesa di schiacciare una scorciatoia da tastiera. Circa una volta a settimana, cade. Ho schiacciato la mia scorciatoia e non succede nulla. Devo rilanciarlo.

Non è straordinariamente fastidioso, ma mi piacerebbe sapere se ci sono dei buoni modi per assicurarsi che le applicazioni desktop continuino a girare per sempre. Se muoiono, vengono rilanciati (forse con un timeout di crash, quindi se si verifica un arresto anomalo al caricamento, non continua a provare a eseguirlo più e più e più volte).

So che alcune applicazioni lo fanno. Su Gnome2, se gnome-panel non è in esecuzione, il sistema lo obbliga a caricare. C'è un modo semplice per attingere a questa logica (ovviamente, senza spezzare Gnome).

Non voglio che questa domanda sia troppo specifica per Gnome Do o anche Gnome perché ho più di un'applicazione per una soluzione (eseguo Boxee su un desktop OpenBox sul nostro media center) e sono sicuro che altre persone tutti hanno i loro problemi che vorrebbero risolvere con qualcosa di simile.

    
posta Oli 06.06.2011 - 13:20

2 risposte

2

Un'altra soluzione non molto 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

Questo si riavvierà se il programma (primo argomento) esce con un codice di ritorno! = 0 e ha eseguito almeno threshold secondi.

Ho provato a creare un lavoro Upstart utilizzando le opzioni respawn e respawn limit , ma in qualche modo non è riuscito.

    
risposta data htorque 06.06.2011 - 14:04
0

Una soluzione semplice, se non particolarmente elegante, sarebbe quella di avviare l'applicazione da uno script in loop, tale che

#!/bin/bash

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

Anche se questo potrebbe dover essere controllato per applicazione, dato che bash non si ferma per tutti i programmi ...

Potresti anche adattarlo per verificare la presenza di codici di errore, in modo tale che esso riappaia solo se l'applicazione si arresta in modo anomalo, piuttosto che chiusa.

    
risposta data thomasmichaelwallace 06.06.2011 - 13:51

Leggi altre domande sui tag