CURL - Hängender Thread

Hallo Geimeinde,

aktuell habe ich folgendes Problem, was ich einfach nicht gelöst / umgangen beomme.

Zur Situation:

Mähroboter mit Robonect Modul fährt durch die Gegend :slight_smile:
In IPS existiert ein Script welches zu bestimmten Ereignissen ausgeführt wird. (Bodenfeuchte, Wetter usw.)
Tritt ein bestimmter Zustand ein (z.B. starker Regen) ruft dieses Script eine Funktion (weiteres Script) auf.
In diesem „Send Command“ Script wird per CURL ein Commando an den Mower geschickt.
Hier kann es natürlich sein das dieser gerade keine stabile WLAN Verbindung hat.
Durch einen Ping versuche ich hier schon das gröbste zu filtern.
Leider kommt es oftmals vor das der Ping am Anfang des „Send Command“ Scriptes noch durch geht, doch während der CURL Passage die Verbidnung wieder weg ist.
Das ganze resultiert darin, das das ursprüngliche „aufrufende“ Script sich verabschieded und als roter thread auf ewig verweilt.

Hier bin ich davon ausgegangen das der max_execution Wert seitens php greift.
Was er jedoch nicht tut.
Vermutlich bekommt das aufrufende Script garnicht mit, das das „Send Command“ Script Probleme hat.

Nun meine Frage an Euch:

Wie kann man das Problem elegant lösen oder zumindes so drehen das beide Scripte bei Übertragungsproblemen zum Mower beendet werden ? (break, exit bzw. manuelles setzen der max_execution_time usw. helfen an der Stelle nicht wirklich weiter)

Danke Euch und einen schönen Wochenstart.

Bye

gmop

Das kann soviel ich weiß nur PHP selbst lösen also Entwickler. Ich habe das ganz ähnlich bei mir mit einer Gartensteuerungsanlage auch über curl und WLAN. Aktuell lass ich mir nur automatisch melden wenn es so ein hängendes Script gibt und starte bei Zeiten wieder mal den Dienst. Könntest natürlich auch den automatisch jeweils Neustarten aber nicht ideal. Falls du ein etwas stärkeres System hast kannst du noch die gesamte Threadzahl erhöhen dann hast du jeweils mehr Zeit. Sorry was besseres wüsst ich nicht… Gruss

Gesendet von iPhone mit Tapatalk

Hallo swissboy,

Danke für deinen Beitrag.

Ich glaube ich habe die Lösung bereits gefunden.
CURL selbst bietet auch eine Option für einen Timeout.

curl_setopt($ch, CURLOPT_TIMEOUT, 20); //timeout in seconds

beendet die CURL Funktion generell nach max. 20 Sekunden.

Leider konnte ich das noch nicht ausgiebig testen (WLAN ist aktuell zu gut :-)), aber die ersten Versuche scheinen zu funktionieren.

Bye

gmop

:slight_smile: hatte ich früher schon mal probiert… klappte leider nicht. Bin mir auch nicht so sicher ob das mi WLAN direkt was zu tun hat ausser im curl gibts dazu ein Leck. Am einfachsten kannst du mit der snmp.dll von PHP testen da kommt der hängende Thread sehr oft zustande. Hab das deswegen völlig deaktiviert aber ist im ,default, nicht drin mit IPS.

Gesendet von iPhone mit Tapatalk

Hallo swissboy,

seit Montag hatte ich keinen hängenden Thread mehr.
Habe auch mal ein Testscript gebaut und den Timeout sehr weit runter genommen.
Die CURL Funktion läuft sauber in den Timeout und beendet sich.

Wie es aussieht nutzt Du IPS unter Windows. (snmp.dll gibt es unter Linux nicht)
Eventuell liegt es auch daran das wir unterschiedliche Ergebnisse mit dem Timeout haben.

Bye

gmop