Timeout für ein Bash Script

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von aeson, 12.11.2008.

  1. aeson

    aeson Foren As

    Dabei seit:
    25.04.2007
    Beiträge:
    86
    Zustimmungen:
    0
    Hallo,

    ich hoffe, dass ich hier richtig bin. Meine Frage ist, glaube ich, nichts besonderes aber dennoch konnte ich bei google leider keine Antwort auf mein Problem finden.

    Wie kann ich die maximale Ausführungszeit eines Shell-Scripts festlegen? Also quasi ein set_time_limit (PHP) für ein Shell-Script.

    gruß aeson
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. c0re

    c0re Debian Guy

    Dabei seit:
    09.02.2008
    Beiträge:
    79
    Zustimmungen:
    0
    Ort:
    Köln
    hm,

    evtl. schafft hier "sleep" abhilfe?

    #!/bin/bash
    echo "Warte 10 Sekunden"
    /usr/bin/blub &
    sleep 10
    kill $!
    echo "Genug Gewartet"
     
  4. aeson

    aeson Foren As

    Dabei seit:
    25.04.2007
    Beiträge:
    86
    Zustimmungen:
    0
    Danke erstmal für die Antwort. Eventuell habe ich mich undeutlich ausgedrückt was ich erreichen wollte. Nehmen wir folgendes Beispiel:

    Ich habe ein Shell-Script, das sollte im Idealfall maximal 10 Sekunden laufen. Jetzt will ich einen Timeout bei 15 Sekunden setzen, der das Script auf jeden Fall nach 15 Sekunden beenden soll.
     
  5. sinn3r

    sinn3r Law & Order
    Moderator

    Dabei seit:
    28.12.2006
    Beiträge:
    2.764
    Zustimmungen:
    0
    Ort:
    Wentorf
    Schau mal hier

    Denke das Beispiel sollte dir helfen.
     
  6. aeson

    aeson Foren As

    Dabei seit:
    25.04.2007
    Beiträge:
    86
    Zustimmungen:
    0
    Entweder stehe ich gerade auf dem Schlauch oder es ist nicht das was ich gesucht habe. Mir ist leider nicht klar, in wie fern mir der Link weiterhelfen kann.
     
  7. sinn3r

    sinn3r Law & Order
    Moderator

    Dabei seit:
    28.12.2006
    Beiträge:
    2.764
    Zustimmungen:
    0
    Ort:
    Wentorf
    Na du baust einfach eine Abfrage ein, die deinen Prozess nach einer festgelegten Zeit killt, mit meinen primitiven Faehigkeiten sieht das dann so aus.
    Code:
    #!/bin/sh
    echo "$PPID"
    sleep $(( 3 * 2 ))
    kill $PPID
    Beendet das Skript nach 3*2 Sekunden.
    Wobei man hier die systemweite Variable $PPID (ID des aktuellen Prozesses) ausnutzt.
     
  8. #7 slackfan, 12.11.2008
    slackfan

    slackfan König

    Dabei seit:
    18.04.2006
    Beiträge:
    809
    Zustimmungen:
    0
    Ort:
    Bonn
    Oder du machst es mit if

    Code:
    #!/bin/bash
    
    fortune &
    
    PID=$!
    sleep 2
    
    if ps $PID ; then
        kill $PID
        echo "gekillt"
    else
        echo "bereits beendet"
    fi
     
  9. #8 floyd62, 12.11.2008
    floyd62

    floyd62 Routinier

    Dabei seit:
    01.05.2007
    Beiträge:
    309
    Zustimmungen:
    0
    ... oder du schickst einen Wecker in den Hintergrund:
    Code:
    #!/bin/sh
    
    TIMEOUT=10
    
    cleanup()
    {
            echo " cleaning up ..."
            echo "Done."
            exit 0
    }
    
    trap cleanup 1 2 3 15
    
    ( sleep $TIMEOUT; kill -HUP $$ ) &
    
    
    while :; do
            echo -n .
            sleep 1
    done
    
     
  10. aeson

    aeson Foren As

    Dabei seit:
    25.04.2007
    Beiträge:
    86
    Zustimmungen:
    0
    Danke für die vielen Beispiele. Ich habe schon einiges mit kill usw. probiert. Das Problem ist nicht das killen als solches sondern das, was anschließend passieren soll. Hier mal genau das was ich brauche:

    Ich rufe meine PHP-Script auf. Dieses führt ein Shell Script mit exec aus. Wenn das Shell Script länger als 10 Sekunden braucht, soll das Shell Script gekillt werden und es soll normal mit dem PHP-Script weiter gehen.
     
  11. #10 sinn3r, 12.11.2008
    Zuletzt bearbeitet: 12.11.2008
    sinn3r

    sinn3r Law & Order
    Moderator

    Dabei seit:
    28.12.2006
    Beiträge:
    2.764
    Zustimmungen:
    0
    Ort:
    Wentorf
    Wartet dein PHP-Skript den auf die Rueckmeldung des Bash-Skriptes?

    Ansonsten (wenn dein PHP-Skript nicht auf das Bash-Skript wartet) ist das doch genau was du suchst.
    Oder versteh ich da was falsch? (PHP sagt Hallo, PHP ruft Skript auf, PHP macht andere Sachen (waehrend das Bash-Skript vor sich hinmacht), PHP verabschiedet sich, um meinen Gedankengang mal zu formulieren ;) )
     
  12. aeson

    aeson Foren As

    Dabei seit:
    25.04.2007
    Beiträge:
    86
    Zustimmungen:
    0
    Ja, das PHP-Script wartet auf das Shell-Script. Wenn sich das Shell-Script aufhängt, hängt auch das PHP-Script. Das, dass PHP-Script nicht weiterläuft solange das Shell-Script läuft ist so gewollt... Deswegen will ich ja auch ein Timeout beim Shell-Script machen worauf ich dann wiederum mit dem PHP-Script reagieren kann um das Shell-Script eventuell erneut ausführen zu können.

    Wenn ich das Shell-Script aber kille, bleibt auch mein PHP-Script hängen :(
     
  13. #12 slackfan, 12.11.2008
    slackfan

    slackfan König

    Dabei seit:
    18.04.2006
    Beiträge:
    809
    Zustimmungen:
    0
    Ort:
    Bonn
    Und was ist, wenn du den sleep-Mechanismus in PHP realisierst?
    In etwa sowas (ungetestet)
    PHP:
    <?php

    $pid 
    system ("fortune &; echo $!;");
    sleep(10);
    if (
    system("ps ".$pid." >/dev/null && echo $?") == "0") {
        
    system("kill ".$pid);
    }

    ?>
     
  14. aeson

    aeson Foren As

    Dabei seit:
    25.04.2007
    Beiträge:
    86
    Zustimmungen:
    0
    Ich habe es erstmal nur so probiert um eventuelle Fehler auszuschließen:

    PHP:
    $pid system ("download.sh ".urlencode(DATEINAME)." &");
    echo 
    "Hallo"
    Theoretisch müsste er ja den Prozess starten und dann sofort Hello ausgeben. Das passiert aber leider nicht :(
     
  15. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  16. #14 slackfan, 12.11.2008
    slackfan

    slackfan König

    Dabei seit:
    18.04.2006
    Beiträge:
    809
    Zustimmungen:
    0
    Ort:
    Bonn
    PHP ist schon so lange her :think:
    Mein Fehler: Nimm mal shell_exec() anstatt system().
    Ansonsten müsste man sich mal in http://php.net/manual/en/ref.exec.php einlesen.
     
  17. aeson

    aeson Foren As

    Dabei seit:
    25.04.2007
    Beiträge:
    86
    Zustimmungen:
    0
    Mit shell_exec geht es leider auch nicht, das Hallo wird wieder nicht angezeigt. Ist es mit PHP vllt nicht möglich Unterprozesse mit & zu starten?
     
Thema: Timeout für ein Bash Script
Besucher kamen mit folgenden Suchen
  1. unix shell script timeout

    ,
  2. bash script stockt

    ,
  3. bash how to timeout

    ,
  4. bash how to use timeout,
  5. linux timeout examples
Die Seite wird geladen...

Timeout für ein Bash Script - Ähnliche Themen

  1. Timeout für Long Time Querys

    Timeout für Long Time Querys: Hi, ich habe ein kleines Script für Cronjob Aufrufe. Nun ist das Problem das ich die Einstellungen von SQL und PHP so setzen (musste) das die...
  2. Timeout Grenze für "ls -l" setzen

    Timeout Grenze für "ls -l" setzen: Hallo zusammen, ich habe folgendes Problem. Ich will in folgendem Shell-Script eine Timeout-Grenze für den ls-Befehl definieren. while read...
  3. Timeout für Netzlaufwerke im Winows

    Timeout für Netzlaufwerke im Winows: Hallo! Ich habe das Problem bei einem Samba Server, daß alle Laufwerke nach einer bestimmten Zeit neu verbunden werden müssen. D.H. Das...
  4. Timeout für auszuführendes Programm

    Timeout für auszuführendes Programm: Hi zusammen, ich bin gerade dabei ein kleines Bash-Script zu schreiben. Dabei soll ein Programm gestartet werden und die Laufzeit des Programms...
  5. "send: Cannot determine peer address" nach Timeout mit UDP Server -Perl Socket eval{}

    "send: Cannot determine peer address" nach Timeout mit UDP Server -Perl Socket eval{}: Mahlzeit, ich habe ein kleines Problem und würde mich über eure Mithilfe freuen! Folgender UDP-Server soll nach einem Timeout über eval{}...