Kann man untendlich laufende php Skripte/Batchdateien beenden?

Moin,

ich habe eben mit

IPS_ExecuteEx("Dummy.bat", "", false, true, -1);

eine Batch Datei gestartet, die einen PAUSE Befehl enthält.

Da das Fenster unterdrückt werden sollte und die Beendigung der Batch Datei abgewartet werden sollte, habe ich damit einen unendlichen lang laufenden PHP Task produziert, der auch nicht nach der maximum execution time automatisch beendet wurde.

Gibt es eine Möglichkeit so einen PHP Task via Konsole zu beenden? In meinem Fall habe ich einfach über den Win Task Manager den Win Command Prozessor beendet und damit auch den PHP Task gestoppt.

Gruß
Hans

PHP Threads können über IPS nicht gestoppt werden.

Grüße,
Kai

Moin,

danke Kai.

Gruß
Hans

Moin,

warum merkt eigentlich IPS nicht, dass der Thread hängt und die maximum execution time längst überschritten ist? Angezeigt wird der hängende php Thread ja.

Gruß
Hans

Erkannt wird es doch, das hat niemand bestritten.
Michael

Moin Michael,

ja, aber das Skript wird nicht beendet - das meinte ich damit.

Andere Skripte, die die Zeit überschreiten, werden zwangsweise beendet - das gezeigte Skript allerdings nicht :wink:

Gruß
Hans

Es gibt viele Gründe warum ein Script hängt. So wie hier, wo ein externer Prozess PHP warten lässt.
PHP beendet Scripte nur wenn ein Befehl fertig ausgeführt wurde.
Kann man auch gut bei Scripten mit Netzwerkkommunikation testen, erst wenn dort ein Timeout passiert, wird auch das Script abgebrochen.
In dein Fall gibt es kein Timeout, also wartet PHP ewig.
Michael

Moin Michael,

danke für die Erklärung. Das hatte ich auch vermutet war mir aber nicht sicher :wink:

Gruß
Hans

Hallo Michael,

alles was Du schreibst ist richtig, nur als ich vor ein paar Jahren mit Symcon begonnen habe, da konnte man in Symcon eine maximale Laufzeit für Skripte einstellen und alle Skripte, die dieses Maximum überschritten haben, hat Symcon automatisch gekillt.

Das war eine sehr sinnvolle Funktion, die inzwischen leider verschwunden ist. Seitdem lese ich von Symcon-Seite nur noch Begründungen, was der Anwender falsch macht.

Ich wünsche mir diese Funktion zurück.

Viele Grüße
Jürgen

Das war nie Symcon welche das gekillt hat.
Es war immer PHP.
Und auch dort gab es schon Funktionen (snmp ?) welche gerne ein Script blockiert haben bzw abgestürzt sind und die PHP nicht mehr beenden konnte.
Die max. Scriptlaufzeit gibt es noch immer.
Michael

Das ist richtig. Nur wird mindestens in der Raspberry-Version nichts mehr gekillt :mad:
Viele Grüße
Jürgen

Gerade getested und leider korrekt.

Ein einfaches Script mit sleep oder IPS_Sleep wird zwar nach 30 Sekunden rot, läuft aber bis zum Ende durch. Früher wurden die Scripte nach der eingestellten Zeit abgeschossen.

Update:

<?php

echo "Start
";
IPS_Sleep(10000);
echo "10
";
IPS_Sleep(10000);
echo "20
";
IPS_Sleep(10000);
echo "30
";
IPS_Sleep(10000);
echo "40
Ende
";

Was mich auch wundert ist, das alle echo’s am Ende der 40 Sekunden ausgegeben werden. Erwarten würde ich nach 10, 20, … Sekunden eine Ausgabe.

Du kannst nicht einfach IPS_Sleep(33000) machen.
In einem Befehl wird nie abgebrochen. Sondern erst anschließend.
Also 5 Mal IPS_Sleep(10000) und dazwischen eine Ausgabe machen. Was passiert dann?
Michael

Wie oben geschrieben, eventuell hast du mein Update noch nicht gesehen gehabt.

Nach 30 Sekunden rot, nach 40 Sekunden die Ausgabe komplett und kein Abschuss!

Kann ich genauso bestätigen. Ärgerlich ist, dass ein fehlerhaftes Skript mit Endlosschleife durch den fehlenden Abschuss des Skripts zwangsläufig einen Symcon-Neustart erfordert.
Wie gesagt: Ich wünsche mir die Funktion zurück. :slight_smile:

Viele Grüße
Jürgen

Aktuell gibt es unter RPi/Ubuntu tatsächlich das Problem, dass das set_time_limit nicht richtig greift. Die „roten“ Threads bei 90% der Probleme hier liegen jedoch eher im System-Bereich, wo das Timeout leider eh nicht greifen würde. Trotzdem sollten wir das set_time_limit Problem endlich mal lösen, damit die 10% der Fälle nicht mehr auftreten :rolleyes:

paresy

Das wäre super, da ich anscheinend immer an den 10% Problemen hängen bleibe. :wink:
Viele Grüße
Jürgen