Ho fatto qualcosa di simile per recuperare ted (Torrent Episode Downloader) dai suoi crash regolari. Di seguito è lo script che ho usato. Lo spiegherò in ulteriori modifiche man mano che procederò.
Modifica: come funziona
Ted ha un file di registro. Dal momento che controlla nuovi episodi ogni mezz'ora, c'è un timestamp in quel registro, che non è più vecchio di mezz'ora. Ovviamente il timestamp non è presente se ted si è schiantato nel frattempo.
Modifica: come ciò potrebbe aiutarti
È possibile reindirizzare l'output del programma problematico in un file. Scrivi uno script simile al mio, che controlla questo file. Se trova lì la stringa errata, riavvia l'applicazione (e rimuove il file di output). Puoi eseguire lo script in un ciclo infinito o usare cron. Ho scelto di utilizzare cron, quindi ho meno inquinamento di processo e comunque i controlli non devono essere incredibilmente frequenti.
#!/bin/bash
# indent-mode: spaces, indentsize: 4, encoding: utf-8
# © 2011 con-f-use@gmx.net.
# Use permitted under MIT license:
# http://www.opensource.org/licenses/mit-license.php (NO WARRANTY IMPLIED)
teddir='/home/confus/ted' # Location of the ted executable
logpath='/home/confus/.Torrent Episode Downloader/log.txt' # Location of ted's log
# Get the process id for ted so it can be killed later
pid=$(lsof "$teddir/ted.jar" | grep -m1 java )
set -- $pid
pid=$2
echo "Ted is running unter pid: $pid."
# Check if the log is recent
search=$(date "+%b %d, %Y @ {0,1}%l:[0-9]{2} %p")
search=$(cat "$logpath" | grep -oE "$search")
# If ted is running and the log is not recent, kill crashed process and
#+restart it.
if [ -n "$pid" ] && [ ! -n "$search" ]; then
echo "Killig $pid."
kill "$pid" || exit 1
echo "Restarting ted..."
cd "$teddir"
/usr/bin/java -jar ted.jar noTray
fi
exit 0
Nel mio caso c'era ancora un processo attivo per ted dopo l'incidente, ma ted non stava facendo nulla. Uccide il processo, quindi puoi ovviamente saltare le parti pid.
PS Potrebbe essere o meno un brutto codice. Potrebbe esserci un modo molto migliore, ma funziona e l'ho messo insieme in un tempo molto breve.