2017-04-25 4 views
0
if [ "$EUID" -ne 0 ] 
    then 
    echo '' 
    echo 'Please run the script as root' 
    echo '' 
    exit 
fi 

for run in {1..11} 
do 
    echo '' 
    echo $run'th running...'  

    echo 'Starting tst script...' 
    echo '' 
    timeout 30 sudo ./tst.sh <-----XXXXXX 

    # Call next script 
    echo '' 
    echo 'Sending data...' 

    for run in {1..10} 
    do # run 10 times 
     sudo /home/ubuntu/Desktop/data/data <----- data.sh   
    done 

    echo '' 
    echo 'restarting script..." 

done 

Das Problem ist, dass ich die tst.sh starten möchte und und nach 30 Sekunden möchte ich es stoppen. Obwohl 'Timeout 30' eine gute Lösung ist, werden die nächsten Zeilen nicht ausgeführt. Wie kann ich dieses Problem beheben, damit ich nach der Ausführung die tst.sh stoppen kann und auch die folgenden Zeilen ausführe?Wie kann ich das "Timeout" ersetzen?

Danke.

+0

Suchen Sie 'tst.sh' als Hintergrundprozess laufen zu lassen? –

+0

BTW: Ersetzen Sie Ihr doube Zitat durch ein einfaches Zitat. – Cyrus

+0

Durchsuchen Sie diese Seite nach 'bash timeout'. – Harvey

Antwort

0

Es verwirrt mich, wie die timeout 30 eine gute Lösung ist. Wenn ich das Skript Streifen nach unten auf ein absolutes Minimum,

echo hop 
timeout 2 sudo sleep 20 
echo plop 

und führen Sie es mit time bash test.sh ich:

hop 
plop 

real 0m20.039s 
user 0m0.012s 
sys  0m0.025s 

Mit anderen Worten, die Linien nach der timeout erhalten ausgeführt (im Gegensatz zu dem, was Sie sind erleben), aber die sleep 20 wird nicht nach 2 Sekunden getötet.

Wie auch immer, könnte eine andere Lösung sein:

sudo ./tst.sh & 
pid=$! 
sleep 30 
kill $pid 
+0

Vielen Dank für Ihre Antwort. OK, aber jetzt habe ich folgendes Problem. Ich möchte tst.sh erst dann beenden, wenn alle Zeilen bereits ausgeführt wurden. Also, nach der Zeile mit echo 'Skript neu starten ... ". Entschuldigung, ich gab dir falsche Informationen über den Prozess zu töten. Ich hoffe, dass du mich verstehst, was ich haben muss. –

+0

Grundsätzlich können Sie die' kill $ pid 'Stellen Sie sicher, dass' pid = $! 'direkt nach dem Start von' sudo./tst.sh' steht. –

Verwandte Themen