Timeout für Long Time Querys

Dieses Thema im Forum "Shell-Skripte" wurde erstellt von Deex, 16.02.2014.

  1. Deex

    Deex Grünschnabel

    Dabei seit:
    13.02.2014
    Beiträge:
    3
    Zustimmungen:
    0
    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 Timeout- Zeit sehr sehr hoch ist.
    Unter umtänden kann es jedoch nun passieren das die scripte eine Hohe Laufzeit haben und sich aufhängen,- diese Anfragen an die Datenbank werden dann nicht mehr unterbrochen sondern
    die laufen stetig weiter. Ich würde nun gerne mein Bash Script Modifizieren und ein Timeout addieren. Ich habe nun von der variable $timeout 1000 gelesen bin mir aber nicht sicher ob das eine hübsche lösung ist.

    Hier mein Aktuelles Script
    Code:
    #!/bin/bash
    
    PROCESS_NUM=$(ps -ef | egrep "/var/www/clients/client1/web18/web/api/cm_tracker9.php" | grep -v "grep" | wc -l)
    
    if [ $PROCESS_NUM -gt 0 ]
    then
        echo
        echo '#-----------------------------------------------#'
        echo '|  Starting background worker:                  |'
        echo '|                                               |'
        echo '|  >>>>>>>>>>>>>>>>>> FAILED <<<<<<<<<<<<<<<<<< |'
        echo '|          Process is already running!          |'
        echo '#-----------------------------------------------#'
        echo
    else
        echo
        echo '#-----------------------------------------------#'
        echo '|  Starting background worker: CMTracker   9    |'
        echo '#-----------------------------------------------#'
        echo
    
        nohup php /var/www/clients/client1/web18/web/api/cm_tracker9.php 2> /var/www/clients/client1/web18/web/api/logs/cm_tracker_9_error.log > /var/www/clients/client1/web18/web/api/logs/cm_tracker_9.log &
    fi
     
  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. #2 Remidemi, 19.02.2014
    Remidemi

    Remidemi Routinier

    Dabei seit:
    17.03.2008
    Beiträge:
    352
    Zustimmungen:
    0
    Ort:
    Südpfalz
    Kann man machen...

    Was hat das jetzt aber mit der $timeout 1000 auf sich?

    Beachte dass in der php.ini eine maximlae Scriptlaufzeit vorgegeben wird.
    Kann mit
    Code:
    ini_set('max_execution_time', 300);
    im Script manipuliert werden.

    300 Sekunden = 5 Minuten
    0 = unendliche Laufzeit, Vorsicht!

    Weiß nicht obs was hilft, man müsste debuggen um heraus zu finden warum die Scripte eigentich hängen.
     
  4. #3 Deex, 20.02.2014
    Zuletzt bearbeitet: 20.02.2014
    Deex

    Deex Grünschnabel

    Dabei seit:
    13.02.2014
    Beiträge:
    3
    Zustimmungen:
    0
    Hallo Remidemi,

    die Maximale Laufzeit für Scripte musste Deaktiviert werden weil wir teilweise an anderer Seite berechnunge durchführen die Wochen dauern.
    Das Problem ist nun eingetreten, einige PHP Scripte haben sich aufgehangen und der Cron konnte sie nicht mehr Starten wiel Sie Aktiv waren.

    Also ich würde in dem Bash Script ein Timeout für den Prozess gerne festlegen.

    Gibt es da auch eine Lösung für das Bash Script den Prozess zu Killen wenn der schon einige Zeit aktiv war?

    Ich hab das grade mal ausprobiert und das testweise so eingefügt

    Scheinbar setzt er es Mm..
     
  5. #4 tgruene, 20.02.2014
    tgruene

    tgruene Routinier

    Dabei seit:
    02.02.2012
    Beiträge:
    418
    Zustimmungen:
    0
    Du kannst mit 'kill' einen Prozess beenden, dessen PID Du kennst. In Deinem Skript holst Du am Anfang die PID ueber grep. Sauberer waere es meiner Meinung nach, wenn die PID von cm_tracker9.php ein eine Datei cm_tracker9.pid geschrieben wuerde - viele Prozesse legen diese Datei unter /var/run ab. Wenn der Prozess sauber endet, kann diese Datei geloescht werden. Ueber das Anlegedatum der Datei findest Du auch die Laufzeit heraus.
     
  6. Deex

    Deex Grünschnabel

    Dabei seit:
    13.02.2014
    Beiträge:
    3
    Zustimmungen:
    0
    Gibt es da keinen einfacheren weg zu sagen der prozess darf nur eine bestimmte Zeit laufen?

    Ich habe das mit php settimeout probiert, doch das funktioniert leider nicht, es haben sich wieder 2 prozesse aufgehangen.
     
  7. #6 bitmuncher, 01.03.2014
    bitmuncher

    bitmuncher Der Stillgelegte

    Dabei seit:
    08.05.2007
    Beiträge:
    3.171
    Zustimmungen:
    0
    Mit Hilfe des Befehls 'timeout' kannst du definieren wie lange ein Befehl laufen soll.

    Code:
    NAME
           timeout - run a command with a time limit
    
    SYNOPSIS
           timeout [OPTION] DURATION COMMAND [ARG]...
           timeout [OPTION]
    
    DESCRIPTION
           Start COMMAND, and kill it if still running after DURATION.
    
    Sollte auch mit Skripten funktionieren solange diese sich nicht vom Control-TTY lösen.
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

Timeout für Long Time Querys

Die Seite wird geladen...

Timeout für Long Time Querys - Ähnliche Themen

  1. Timeout für ein Bash Script

    Timeout für ein Bash Script: Hallo, ich hoffe, dass ich hier richtig bin. Meine Frage ist, glaube ich, nichts besonderes aber dennoch konnte ich bei google leider keine...
  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{}...