Timeout für Long Time Querys

D

Deex

Grünschnabel
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
 
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.
 
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.

ini_set('max_execution_time', 300);

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

ini_set('max_execution_time', 300); //300 seconds = 5 minutes
echo ini_get('max_execution_time');

Scheinbar setzt er es Mm..
 
Zuletzt bearbeitet:
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.
 
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.
 
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.
 

Ähnliche Themen

Script zum Bereinigen von Dateien mit Unterverzeichnissen (Schadcode löschen) eilt

Glassfish Initscript

VHOST Problem, Debian Lenny

Problem mit Apache2 + MySQL Server

Jaunty + Zend + Gdata + xampp

Zurück
Oben