Analyse Probleme mit system.Exec()
Moderator: Co-Administratoren
- jmaus
- Beiträge: 9865
- Registriert: 17.02.2015, 14:45
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Dresden
- Hat sich bedankt: 464 Mal
- Danksagung erhalten: 1883 Mal
- Kontaktdaten:
Analyse Probleme mit system.Exec()
Hallo Zusammen,
wie schon viele Jahre bekannt gibt es ja mit der Nutzung der system.Exec() Funktion innerhalb eines HomeMatic Skriptes gewisse Probleme die dazu geführt haben das weitläufig bekannt ist das man lieber CUxD EXEC Aufrufe verwenden sollte um Unix Programme auf der CCU auszuführen. Nun habe ich selber schon immer von Anfang an daher auf CUxD gesetzt, würde nun jedoch gerne dem Problem mal ein wenig auf den Grund gehen wollen um zu verstehen wo genau das Problem liegt bzw. welche Symptome es bzgl. system.Exec() Aufrufe gibt.
Ich würde daher gerne einmal gerade von den weitaus erfahreneren Nutzern wissen wollen welche Probleme es denn definitiv mit der system.Exec() Funktion gibt, wie die sich äußern und wie ich das hier auf einem jungfräulichen CCU2 system reproduzieren kann.
Es wäre daher schön wenn wir hier eine Aufstellung der bekannten Probleme rund um system.Exec() erstellen könnten. Wichtig wäre mir hierbei in der Tat nur Probleme zu listen/melden die sich definitiv mittels Beispielskripten auf einer jungfräulichen CCU2 reproduzieren lassen. Bitte also nur die Probleme melden für die ihr auch Beispielskripts und Beispielausgaben der Probleme parat habt oder die definitiv von mehreren Nutzern bereits verifiziert wurden.
Sinn des Ganzen soll es sein die Probleme rund um system.Exec() besser verstehen zu können und ggf. sogar Workarounds dafür so zu erarbeiten das man in Zukunft ggf. wieder problemlos auf system.Exec() (zumindest mit RaspberryMatic) setzen kann.
wie schon viele Jahre bekannt gibt es ja mit der Nutzung der system.Exec() Funktion innerhalb eines HomeMatic Skriptes gewisse Probleme die dazu geführt haben das weitläufig bekannt ist das man lieber CUxD EXEC Aufrufe verwenden sollte um Unix Programme auf der CCU auszuführen. Nun habe ich selber schon immer von Anfang an daher auf CUxD gesetzt, würde nun jedoch gerne dem Problem mal ein wenig auf den Grund gehen wollen um zu verstehen wo genau das Problem liegt bzw. welche Symptome es bzgl. system.Exec() Aufrufe gibt.
Ich würde daher gerne einmal gerade von den weitaus erfahreneren Nutzern wissen wollen welche Probleme es denn definitiv mit der system.Exec() Funktion gibt, wie die sich äußern und wie ich das hier auf einem jungfräulichen CCU2 system reproduzieren kann.
Es wäre daher schön wenn wir hier eine Aufstellung der bekannten Probleme rund um system.Exec() erstellen könnten. Wichtig wäre mir hierbei in der Tat nur Probleme zu listen/melden die sich definitiv mittels Beispielskripten auf einer jungfräulichen CCU2 reproduzieren lassen. Bitte also nur die Probleme melden für die ihr auch Beispielskripts und Beispielausgaben der Probleme parat habt oder die definitiv von mehreren Nutzern bereits verifiziert wurden.
Sinn des Ganzen soll es sein die Probleme rund um system.Exec() besser verstehen zu können und ggf. sogar Workarounds dafür so zu erarbeiten das man in Zukunft ggf. wieder problemlos auf system.Exec() (zumindest mit RaspberryMatic) setzen kann.
RaspberryMatic 3.75.7.20240420 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal /
Re: Analyse Probleme mit system.Exec()
Als exzessiver system.Exec-User sind mir keine Probleme bekannt.jmaus hat geschrieben:Ich würde daher gerne einmal gerade von den weitaus erfahreneren Nutzern wissen wollen welche Probleme es denn definitiv mit der system.Exec() Funktion gibt, wie die sich äußern und wie ich das hier auf einem jungfräulichen CCU2 system reproduzieren kann.
Auch ein Stresstest konnte meine Produktiv-CCU nicht beeindrucken.
Stresstest:
viewtopic.php?f=37&t=30073
.
- blackhole
- Beiträge: 3730
- Registriert: 21.07.2015, 14:03
- System: CCU
- Hat sich bedankt: 184 Mal
- Danksagung erhalten: 587 Mal
Re: Analyse Probleme mit system.Exec()
Anfang 2015 hatte ich mich von den wirklich vielen, meines Erachtens aber nicht mehr haltbaren Aussagen in Sachen system.Exec irritieren lassen und alles auf CUxD-Exec umgestellt. Heute kann ich sagen, dass system.Exec -trotz intensiver Nutzung- problemlos funktioniert.
Die Rückumstellung auf das CCU-eigene system.Exec erfolgte bei mir Mitte 2016.
Die Rückumstellung auf das CCU-eigene system.Exec erfolgte bei mir Mitte 2016.
- jmaus
- Beiträge: 9865
- Registriert: 17.02.2015, 14:45
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Dresden
- Hat sich bedankt: 464 Mal
- Danksagung erhalten: 1883 Mal
- Kontaktdaten:
Re: Analyse Probleme mit system.Exec()
Ok, danke für die ersten Rückmeldungen. Ich bin gespannt ob noch andere etwas diesbzgl. berichten können und ggf. sich sogar jemand findet der aktuell noch Probleme hat bzw. ein konkretes Beispiel benennen kann bei dem system.Exec() ein Problem ist (parallele Ausführung oder ähnliches).blackhole hat geschrieben:Anfang 2015 hatte ich mich von den wirklich vielen, meines Erachtens aber nicht mehr haltbaren Aussagen in Sachen system.Exec irritieren lassen und alles auf CUxD-Exec umgestellt. Heute kann ich sagen, dass system.Exec -trotz intensiver Nutzung- problemlos funktioniert.
Die Rückumstellung auf das CCU-eigene system.Exec erfolgte bei mir Mitte 2016.
Auch würde mich interessieren ob es irgendwelche nennenswerten Limitationen von system.Exec() gegenüber den CUxD-Exec Aufrufen gibt die eventl. beachtenswert wären. Ich möchte hier einfach mal einen kompletten Vergleich von system.Exec() gegenüber CUxD-Exec machen und hier nicht nur eventl. Bugs/Probleme diesbzgl. auflisten wollen sondern auch mögliche Limitation (fehlende Features, etc.) die in system.Exec() existieren im Vergleich zu CUxD-Exec aufzeigen wollen.
RaspberryMatic 3.75.7.20240420 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal /
- uwe111
- Beiträge: 4821
- Registriert: 26.02.2011, 22:22
- Hat sich bedankt: 3 Mal
- Danksagung erhalten: 246 Mal
- Kontaktdaten:
Re: Analyse Probleme mit system.Exec()
Hallo Jens,
Der Ansatz vom CUxD-Exec ist halt ein ganz anderer. Bei CUxD-Exec funktioniert die Befehlsausführung abgekoppelt über einen Datenpunkt eines virtuellen Gerätes mit weiterer Funktionalität und bei System.Exec wird der Befehl m.E. direkt im Script ausgeführt.
So handelt es sich beim CUxD-Exec eher um eine Erweiterung, als einen Ersatz. Ich denke für beides gibt es Anwendungen, falls System.Exec jetzt stabil laufen sollte.
Viele Grüße
Uwe
Na wenn Du hier mal nicht Äpfel mit Birnen vergleichst.jmaus hat geschrieben:Auch würde mich interessieren ob es irgendwelche nennenswerten Limitationen von system.Exec() gegenüber den CUxD-Exec Aufrufen gibt die eventl. beachtenswert wären. Ich möchte hier einfach mal einen kompletten Vergleich von system.Exec() gegenüber CUxD-Exec machen und hier nicht nur eventl. Bugs/Probleme diesbzgl. auflisten wollen sondern auch mögliche Limitation (fehlende Features, etc.) die in system.Exec() existieren im Vergleich zu CUxD-Exec aufzeigen wollen.
Der Ansatz vom CUxD-Exec ist halt ein ganz anderer. Bei CUxD-Exec funktioniert die Befehlsausführung abgekoppelt über einen Datenpunkt eines virtuellen Gerätes mit weiterer Funktionalität und bei System.Exec wird der Befehl m.E. direkt im Script ausgeführt.
So handelt es sich beim CUxD-Exec eher um eine Erweiterung, als einen Ersatz. Ich denke für beides gibt es Anwendungen, falls System.Exec jetzt stabil laufen sollte.
Viele Grüße
Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN Download: CUxD 2.11, SSH KeyDir
SPENDEN Download: CUxD 2.11, SSH KeyDir
-
- Beiträge: 1295
- Registriert: 16.05.2010, 12:39
- Wohnort: Südwestlich von Graz
- Danksagung erhalten: 9 Mal
Re: Analyse Probleme mit system.Exec()
Hallo,
ich hatte vor der Umstellung auf CUxD reproduzierbare Probleme mit dem system.exec der CCU.
Ich verwendete system.exec zum Versenden von Push-Nachrichten. Das Versenden einzelner Nachrichten ging relativ gut. Aber das Versenden von mehreren Nachrichten gleichzeitig führte dazu, dass irgendwann (vielleicht nach 50 Nachrichten) keine Programme mehr ausgeführt wurden.
Ich hab mir das so erklärt, dass das Aufrufen eines system.exec-Befehls, während ein anderer noch lief, irgendwelche Rückstände im System verursacht.
Bei genügend Rückständen kann die CCU keine Programme mehr ausführen.
Sonnige Grüße!
Robert
ich hatte vor der Umstellung auf CUxD reproduzierbare Probleme mit dem system.exec der CCU.
Ich verwendete system.exec zum Versenden von Push-Nachrichten. Das Versenden einzelner Nachrichten ging relativ gut. Aber das Versenden von mehreren Nachrichten gleichzeitig führte dazu, dass irgendwann (vielleicht nach 50 Nachrichten) keine Programme mehr ausgeführt wurden.
Ich hab mir das so erklärt, dass das Aufrufen eines system.exec-Befehls, während ein anderer noch lief, irgendwelche Rückstände im System verursacht.
Bei genügend Rückständen kann die CCU keine Programme mehr ausführen.
Sonnige Grüße!
Robert
Re: Analyse Probleme mit system.Exec()
Wie wurden die Nachrichten denn gleichzeitig verschickt?peissl.at hat geschrieben:Aber das Versenden von mehreren Nachrichten gleichzeitig führte dazu, dass irgendwann (vielleicht nach 50 Nachrichten) keine Programme mehr ausgeführt wurden.
Wenn möglich bitte das entsprechende Skript und Programm posten und beschreiben wie das Programm getriggert wurde.
Ohne diiese Informationen ist es nicht reproduzierbar.
.
-
- Beiträge: 1295
- Registriert: 16.05.2010, 12:39
- Wohnort: Südwestlich von Graz
- Danksagung erhalten: 9 Mal
Re: Analyse Probleme mit system.Exec()
Hallo,
Du legst einfach zwei Programme an. In jedem der Programme verwendest Du im Script einen system.exec-Befehl (zB: zum Versenden von Push-Nachrichten)
wget -q -O /dev/null '"#url#"'
Dann stellst Du sicher, dass beide Programme zugleich ausgelöst werden. (zB: beide enthalten den selben WENN-Teil)
Nach gefühlten 50 Programmstarts, wurden bei mir dann keine Programme mehr ausgeführt.
Umstellung auf CUxD so um das Jahr 2013 hat das dann Problem gelöst.
Sonnige Grüße!
Robert
PS: Ich kann auch das CCU-Timerproblem reproduzieren, aber das ist eine andere Geschichte...
Du legst einfach zwei Programme an. In jedem der Programme verwendest Du im Script einen system.exec-Befehl (zB: zum Versenden von Push-Nachrichten)
wget -q -O /dev/null '"#url#"'
Dann stellst Du sicher, dass beide Programme zugleich ausgelöst werden. (zB: beide enthalten den selben WENN-Teil)
Nach gefühlten 50 Programmstarts, wurden bei mir dann keine Programme mehr ausgeführt.
Umstellung auf CUxD so um das Jahr 2013 hat das dann Problem gelöst.
Sonnige Grüße!
Robert
PS: Ich kann auch das CCU-Timerproblem reproduzieren, aber das ist eine andere Geschichte...
Re: Analyse Probleme mit system.Exec()
Habe ich gerade getestet mit 200 wget-Aufrufen.peissl.at hat geschrieben:Dann stellst Du sicher, dass beide Programme zugleich ausgelöst werden. (zB: beide enthalten den selben WENN-Teil)
Nach gefühlten 50 Programmstarts, wurden bei mir dann keine Programme mehr ausgeführt.
Der Fehler ist so nicht reproduzierbar. Die CCU führt die 200 Anweisungen komplett durch und werkelt danach dann ganz normal weiter.
Kann es sein, dass Du nur gemeint hast, dass die Programme nicht mehr gestartet werden?
Du mußt natürlich beachten, dass wenn Du ein/zwei Programme 50 mal hintereinander triggerst, erst diese 50 Programme und Skripte nacheinander vollständig abgearbeitet werden bis das nächste Programm/Skript überhaupt eine weitere Aktion ausführt.
Wenn jetzt zum Beispiel ein einziger wget-Aufruf 1 Minute benötigt, dann geht fast 1 Stunde nichts mehr Anderes auf der CCU. Also die CCU ist für eine Stunde quasi lahmgelegt.
Dann her damit.peissl.at hat geschrieben:PS: Ich kann auch das CCU-Timerproblem reproduzieren, aber das ist eine andere Geschichte...
.
- jmaus
- Beiträge: 9865
- Registriert: 17.02.2015, 14:45
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Dresden
- Hat sich bedankt: 464 Mal
- Danksagung erhalten: 1883 Mal
- Kontaktdaten:
Re: Analyse Probleme mit system.Exec()
Nur weil eine langsame CCU2 nicht regelmäßig in das CCU-Timerproblem rennt heisst das noch lange nicht das das Problem auch nicht existiert (hat). Schau dir einfach dazu mal folgendes changelog an:BadenPower hat geschrieben:Dann her damit.peissl.at hat geschrieben:PS: Ich kann auch das CCU-Timerproblem reproduzieren, aber das ist eine andere Geschichte...
https://github.com/eq-3/occu/tree/maste ... WebUI-Beta
Unter RaspberryMatic passiert sowas einfach häufiger weil dort die Ressourcen nicht so knapp sind und die CPU das multithreading das in ReGaHss steckt dann besser ausnutzen kann und es zu race conditions kommt. Gottseidank repariert das die ReGaHss Beta version die ich dort referenziert habe aber.
RaspberryMatic 3.75.7.20240420 @ ProxmoxVE – ~200 Hm-RF/HmIP-RF/HmIPW Geräte + ioBroker + HomeAssistant – GitHub / Sponsors / PayPal /