FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Qualle am 24 November 2014, 23:42:58

Titel: Aufruf eines Perl Scripts klappt nicht --- GELÖST
Beitrag von: Qualle am 24 November 2014, 23:42:58
Hallo,
bin am Verzweifeln... :-\
Vermutlich habe ich inzwischen alle Beiträge zum Thema "Aufruf eines Perl-Scripts" gelesen. Und so sieht es jetzt auf meinem Raspi aus:
Der Aufruf aus FHEM: define FussbodenhzgStrg at +*00:01:00 {\system(`sudo /opt/fhem/fhem_heatswitch.pl &`)}
Owner dieses Scripts ist fhem. Die Berechtigung steht zusätzlich auf 777.
Das Script läuft einwandfrei als root. FHEM zeigt im Log lediglich "-1". Ausgeführt wird es jedoch nicht, ansonsten könnte ich Einträge in einem externen LogFile sehen.

Was habe ich nicht verstanden? Bin dankbar für jeden Hinweis  :)
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: igami am 25 November 2014, 05:02:24
Zitat von: Qualle am 24 November 2014, 23:42:58
Bin dankbar für jeden Hinweis  :)
sudo
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: Hollo am 25 November 2014, 08:42:43
Zitat von: Qualle am 24 November 2014, 23:42:58
define FussbodenhzgStrg at +*00:01:00 {\system(`sudo /opt/fhem/fhem_heatswitch.pl &`)}
Steht das so in Deiner config?
Wofür soll der backslash vor dem system-Aufruf sein? Weglassen.
Entweder " oder ' , aber keine `´ .
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: Doggiebert am 25 November 2014, 08:53:06
oder einfach - ohne es getestet zu haben:
{qx(sudo /opt/fhem/fhem_heatswitch.pl &)}
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: Qualle am 26 November 2014, 21:58:08
Sorry Ihr beiden, dass ich jetzt erst antworte ??? Bin neu hier und dachte ich bekomme eine Mail, wenn jemand antwortet..
@ Hollo: Den sudo habe ich doch im Code. Zusätzlich hatte ich auch den User fhem zum sudoer gemacht (obwohl ich mich mit Linux gar nicht auskenne..)
@Doggiebert: Habe den Code mit qx getestet, bringt nichts. Habe dann mal mit ' gearbeitet. Das Script wird leider immer noch nicht gestartet, aber im Log sieht es jetzt so aus:

2014.11.26 21:45:36 3: FussbodenhzgStrg: sudo /opt/fhem/fhem_heatswitch.pl &
2014.11.26 21:46:59 3: FussbodenhzgStrg: sudo /opt/fhem/fhem_heatswitch.pl

Ich habe mal mit und mal ohne & getestet..

Gruß
Frank
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: Doggiebert am 26 November 2014, 22:19:32
nuja, scheinbar funktioniert schon mal das "at".

Also, einen Schritt zurück, führ das "sudo ..." mal auf der Linux-Kommandozeile mit dem User aus, unter dem FHEM läuft.
Evtl.  ist dieser User nicht berechtigt, sudo auszuführen (sudoers)?
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: Qualle am 26 November 2014, 23:28:23
Hallo Doggiebert,
mit dem sudo beschäftige ich mich schon den ganzen Abend. Also das steht schon seit längerer Zeit in meiner sudoers: fhem ALL=(ALL) NOPASSWD: ALL
Ich glaube, mehr geht nicht. Wie kann ich denn einen Test auf der Commandline mit einem anderen User ausführen? Mit fhem kann ich mich nicht anmelden.

Gruß
Frank
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: Doggiebert am 27 November 2014, 00:25:06
normalerweise kannst Du mit su - <username>    den Benutzer wechseln. Aber ich bin nun auch kein Linux Crack (mehr...).
Andere Option: pipe mal den Output von stdout und stderr in eine Datei, so in der Art:

{qx(sudo /opt/fhem/fhem_heatswitch.pl 1>/var/log/testout1.txt 2>/var/log/testout2.txt)}
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: Qualle am 27 November 2014, 16:32:58
Hi Doggibert,

habe weiter getestet. Deinen Vorschlag mit dem Logging umgesetzt. Ergebnis: keine Logfiles. Ist aber auch zu erwarten, da hierfür ja das Perl Script laufen müsste. Also noch ein Beweis, dass FHEM das Script nicht startet. Habe gestern nochmal den PI und FHEM upgedated. Bringt leider auch nichts.
Dir Vielen Dank für die Tipps. Ich finde es eben schade, dass von den FHEM-Machern keine Antwort kommt. Man hat ja den Eindruck, dass hier ein Bug vorliegt. Schaut man sich im Netz um, stellt man immer wieder fest, dass die meisten Threats zu diesem Thema im Sande verlaufen. Es gibt aber auch immer mal einen, bei dem es klappt. Letztendlich bin ich auf die Idee mit dem Script gekommen, weil ich fetsgestellt habe, dass ich bereits das mit der wiring PI gelieferte Shell Script auf der Kommandozeile einwandfrei ausführen kann, aus FHEM heraus nicht. Zusätzlich habe ich mir noch einige spezielle Funktionen in mein Script gebaut, die ich eben benötige, um meine Fussbodenheizung optimal zu regeln.

Gruß
Frank
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: pre am 27 November 2014, 16:52:55
Hallo,

ich vermute, das liegt am Environment des Benutzers fhem. fhem selber hat bei mir keine shell in /etc/passwd (/bin/false bedeutet 'keine').

grep fhem /etc/passwd


Somit klärt sich das "Benutzer Werden". Als root

su -l fhem -s /bin/sh

und schon bist du fhem mit einer shell. 'qx' ruft in Perl meines Wissens eine eigene shell auf, so dass das Script prinzipiell trotzdem gestartet werden müsste. Allerdings hat es eine völlig andere Umgebung. Deshalb sind auch die absoluten Pfade wichtig. Kannst ja mal als fhem "env" aufrufen. Verwendest Du in dem Script irgendeine Environment Variable z.B. Hostname oder so? Das dürfte mit ziemlicher Sicherheit zu einem Problem führen. 

Ciao

Peter
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: Qualle am 27 November 2014, 22:33:56
Hallo Pre,

erster Versuch: Script startet nicht.
Dann habe ich die Zeilen mal auf der Shell getestet: 1. passt, 2. passt, 3. liefert "Can't open fhem"
Also habe ich als Linux Greenhorn einfach mal Deinen Code etwas reduziert auf:
(http://sudo%20-s%20/bin/sh%20-c%20"/opt/fhem/fhem_heatswitch.pl")
So läuft der Code wieder auf der Kommandozeile. Das FHEM Log zeigt ebenfalls alles gut an: 2014.11.27 22:31:44 3: FussbodenhzgStrg: sudo -s /bin/sh -c "/opt/fhem/fhem_heatswitch.pl"

Nur eben passiert wieder nichts.  :-\
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: Qualle am 27 November 2014, 22:48:55
 :) :) :) :) :) ...und jetzt geht es doch  :) :) :) :) :)

Ich habe dann mal noch "System" wieder eingefügt und jetzt läuft es endlich!

8) 8) 8) 8) DANKE AN ALLE, DIE MIR GEHOLFEN HABEN UND BESONDEREN DANK AN PRE  8) 8) 8) 8)

Hier nochmal die Syntax:
(http://{system('sudo%20-s%20/bin/sh%20-c%20"/opt/fhem/fhem_heatswitch.pl"%3Cbr%20/%3E')%7D)

LG
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: Qualle am 27 November 2014, 22:50:47
 :o Ups, falschen Button erwischt...

{system('sudo -s /bin/sh -c "/opt/fhem/fhem_heatswitch.pl"
')}
Titel: Antw:Aufruf eines Perl Scripts klappt nicht
Beitrag von: Puschel74 am 27 November 2014, 22:52:43
Und nochmal bearbeiten und dann meinen angepinnte Beitrag lesen.
Danke.