FHEM Forum

FHEM => Sonstiges => Thema gestartet von: Baumi am 29 Dezember 2015, 12:20:26

Titel: system()-Aufruf hängt FHEM auf. Wie kann ich es debuggen?
Beitrag von: Baumi am 29 Dezember 2015, 12:20:26
Hallo alle!

Ich versuche ein externes Programm von FHEM aufzurufen. (Plattform: OS X 10.10.4, FHEM ist auf dem neuesten Stand.)

Der Perl-Code sieht so aus:

sub sysTest() {
  system("/pfad/zu/script.pl &");
}


script.pl wiederum ist das hier:

#!/usr/bin/perl
print "Done!\n";


Wenn ich sysTest in einem Standalone-Perl-Skript einsetze, funktioniert alles, wie erwartet. Durch Nutzen von sleep-Befehlen kann ich auch beobachten, dass das Skript wirklich im Hintergrund läuft. Wenn ich die sysTest-Funktion aber in meine 99_myUtils einbaue, hängt FHEM nach ihrer Ausführung. Auch auf verbose 5 erscheint nur das hier im Log:

2015.12.29 10:09:49 5: Cmd: >{ sysTest();}<
Done!


Danach kommt nichts mehr – offenbar hängt irgend etwas in FHEM irgendwo. Ich hab' einigermaßen Erfahrung mit Perl und würde auch gerne selber nachbohren, wo es hakt, aber ich hab' keine Ahnung, wo ich anfangen soll. Hat jemand eine Idee?
Titel: Antw:system()-Aufruf hängt FHEM auf. Wie kann ich es debuggen?
Beitrag von: rudolfkoenig am 29 Dezember 2015, 12:32:40
Ich habe das abgebildete Skript in /tmp abgelegt, und es direkt aufgerufen:
Zitatfhem> { system("/tmp/script.pl &") }
-1
fhem>
bei mir haengt es nicht, und im Log steht Done!
Titel: Antw:system()-Aufruf hängt FHEM auf. Wie kann ich es debuggen?
Beitrag von: Baumi am 29 Dezember 2015, 12:53:34
Vielen Dank für die schnelle Antwort und das Überprüfen! Ich hab' schon befürchtet, dass es ein Problem ist, dass für meine Installation spezifisch ist – schließlich gibt es genug Beispielcode hier im Forum, der auch solche Aufrufe einsetzt.

Ich ziehe mit dem Install sowieso demnächst auf einen raspi 2 um, insofern tendiere ich schon fast dazu, einfach abzuwarten, ob das Problem sich im Zuge dessen nicht von selber löst. Andererseits stört es mich immer, wenn ich nicht weiß, warum meine Geräte nicht das tun, was sie eigentlich tun sollten.

Am sinnvollsten wäre es wahrscheinlich, eine separate FHEM-Instanz auf demselben Rechner aufzusetzen und in die dann schrittweise alle Module und Geräte aus dem "Original" einzubinden bis der Fehler auftritt, oder?