PDA

Visualizza la versione completa : script bash per riavviare programma?!?!


virusbye
27-07-2004, 13:03
Ciao,
qualcuno ha sottomano, o mi aiuterebbe a fare uno script bash che avvia un programma e, nel caso questo si interrompa, lo riavvii automaticamente?

ammettiamo che il programma si chiami PIPPO quello che vorrei facesse lo script è qualcosa del genere:

1) avvia PIPPO
2) ogni tot secondi (o con un ciclo) controlla che PIPPO sia vivo (con un ps ax o con un pid PIPPO)
3) se PIPPO si interrompe (quindi non è più in ps ax o non c'è più il PID) riavvialo

mi aiutereste? :stordita:

lnessuno
27-07-2004, 13:13
ma sto pippo libera la console dopo essere stato avviato, o la tiene occupata finchè non si chiude?

perchè nel secondo caso sarebbe semplicissimo, basterebbe un ciclo senza fine che avvia il programma... il ciclo si fermerebbe tutte le volte finchè il prog. stesso non si chiude, per poi ricominciare... :zizi:

non è una soluzione bellissima, però dovrebbe funzionare :D

virusbye
27-07-2004, 13:21
Originariamente inviato da lnessuno
ma sto pippo libera la console dopo essere stato avviato, o la tiene occupata finchè non si chiude?

perchè nel secondo caso sarebbe semplicissimo, basterebbe un ciclo senza fine che avvia il programma... il ciclo si fermerebbe tutte le volte finchè il prog. stesso non si chiude, per poi ricominciare... :zizi:

non è una soluzione bellissima, però dovrebbe funzionare :D

si si ... mi va bene

io non conosco la sintassi bash... qualcuno me lo scriverebbe per favore?

:stordita:

lnessuno
27-07-2004, 13:28
#! /bin/bash
# inizio il ciclo, la variabile a deve andare da 1 a 2, con incrementi di 1
for ((a=1; a <= 2 ; a++))
do
# eseguo il programma
mozilla
# se arriva qua si è liberata la console, il programma quindi è crashato
echo "Azz si è chiuso il programma! lo riapro!"
# la variabile a torna a 1 così il ciclo non si chiude
let a=1;
# aspetto 5 secondi prima di continuare... così lo si può bloccare con ctrl+c se voglio fermarlo.
sleep 5;
done;



dovrebbe andare... credo :stordita:

virusbye
27-07-2004, 13:36
Originariamente inviato da lnessuno


#! /bin/bash
# inizio il ciclo, la variabile a deve andare da 1 a 2, con incrementi di 1
for ((a=1; a <= 2 ; a++))
do
# eseguo il programma
mozilla
# se arriva qua si è liberata la console, il programma quindi è crashato
echo "Azz si è chiuso il programma! lo riapro!"
# la variabile a torna a 1 così il ciclo non si chiude
let a=1;
# aspetto 5 secondi prima di continuare... così lo si può bloccare con ctrl+c se voglio fermarlo.
sleep 5;
done;


dovrebbe andare... credo :stordita:

Funziona alla grande!
Grazie mille!

:unz: :unz: :unz:

lnessuno
27-07-2004, 13:43
così funziona meglio :)

esempio: ./eseguiricorsivo file-roller



#!/bin/bash
# controllo se è stato passato il nome del programma
if [ -n "$1" ]
then
# inizio il ciclo, la variabile a deve andare da 1 a 2, con incrementi di 1
for ((a=1; a <= 2 ; a++))
do
# eseguo il programma
$1
# se arriva qua si è liberata la console, il programma quindi è crashato
echo "Azz si e' chiuso il programma! lo riapro!"
# la variabile a torna a 1 così il ciclo non si chiude
let a=1;
# aspetto 5 secondi prima di continuare... così lo si può bloccare con ctrl+c se voglio fermarlo.
sleep 5;
done;
else
# non hai passato la variabile, birichino...
echo "Eh ma non mi hai detto che programma vuoi far partire...! (Es: ./eseguiricorsivo nomeprogramma)"
fi

GhePeU
27-07-2004, 14:05
quante complicazioni!

basta una riga in una console


while true; do nome-programma; sleep 5; done

o se proprio vuoi lo script


#!/bin/bash
while true; do $1; sleep 5; done

lnessuno
27-07-2004, 14:13
bof anche il mio se vuoi lo fai stare su una riga... enorme, ma è sempre solo una riga :D


e poi il tuo non prende il nome del programma come argomento che passi quando lanci lo script :prrr: :D

lnessuno
27-07-2004, 14:18
aggiornato con while true, che non conoscevo :)

http://lnessuno.altervista.org/sorgenti/eseguiricorsivo.html



#!/bin/bash
# controllo se &egrave; stato passato il nome del programma
if [ -n "$1" ]
then
# ciclo senza fine!
while true
do
# eseguo il programma
$1
# se arriva qua si Ú liberata la console, il programma quindi &egrave; crashato
echo "Azz si e' chiuso il programma! lo riapro!"
# aspetto 5 secondi prima di continuare... così lo si può bloccare con ctrl+c se voglio fermarlo.
sleep 5;
done;
else
# non hai passato la variabile, birichino...
echo "Eh ma non mi hai detto che programma vuoi far partire...! (Es: ./eseguiricorsivo nomeprogramma)"
fi

GhePeU
27-07-2004, 16:15
Originariamente inviato da lnessuno
bof anche il mio se vuoi lo fai stare su una riga... enorme, ma è sempre solo una riga :D


e poi il tuo non prende il nome del programma come argomento che passi quando lanci lo script :prrr: :D

come non lo prende?


do $1

:ciapet: :D

Loading