nachdem ich vor einiger Zeit leider festgestellt habe, dass IPS bzw. PHP kein Zeitlimit für Skripte mehr besteht, bringt mir das ab und an „Ärger“:
Mein IPS wird jede Nacht um 3:00 beendet und der Ordner wird als Zip weggesichert. Danach wird IPS wieder gestartet. (Linux, Bullseye)
Leider passiert aber ab und an (sehr selten) folgendes: Ein Skript hängt sich auf bzw. läuft nicht zu Ende und IPS fährt dann auch nicht zu Ende runter.
Dann muss ich den Host händisch per SSH rebooten.
Wie kann ich hängende Skripte detektieren und nach eine bestimmten Dauer beenden? Oder alternativ, wie kann ich bestimmte Skripte nach einer gewissen Zeit zwangsbeenden?
(Eins davon ist z.B. die Abfrage von Daten aus der VW WeConnect-Cloud, das führt ab und an zu o.g. Problem).
Gar nicht. Zwangsbeenden ist nicht möglich, außer durch Killen des Dienstes. Das Detektieren geht, indem du die laufenden Threads bzgl. Laufzeit auswertest. Das ist natürlich nur ein Indiz (es kann ja durchaus Skripte geben, die erst nach langer Zeit fertig werden).
Das Problem ist, es hängt z.B. der Datenabruf von meinem Arteon - dann kann ich das ggf. sogar sehen und genau garnichts machen?
Denn - wenn IPS um 3:00 hängt, dann macht die Heizung um 7:00 auch kein Warmwasser
Hat vielleicht jemand denn konkret am Skript ne Idee:
Aus meiner Sicht sind die externen Befehle die einzige Möglichkeit, wo was hängen bleiben kann, weil das Skript auf deren Ausführung wartet, bevor es weiter macht.
Hast du mal IPS_Execute() mit Wartezeit versucht oder > /dev/null 2>/dev/null & ans Ende deines Befehls von exec() anzuhängen, damit die Ausführung von exec() asynchron läuft?
Aber dann kann es natürlich sein, dass dein Variablen-Status nicht mehr zu deinen Ausführungen passt.
Ich hatte letztens auch ein Script das exec() nutzte und hing. Als ich dann den Process auf der Konsole mit kill abgeschossen hatte - kam das Script wieder zurück
Sonst gilt - wie hier schon geschrieben - geht nicht!