Aufruf eines Perl Scripts klappt nicht --- GELÖST

Begonnen von Qualle, 24 November 2014, 23:42:58

Vorheriges Thema - Nächstes Thema

Qualle

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  :)

igami

Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Hollo

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 `´ .
FHEM 6.x auf RPi 3B Buster
Protokolle: Homematic, Z-Wave, MQTT, Modbus
Temp/Feuchte: JeeLink-Clone und LGW mit LaCrosse/IT
sonstiges: Linux-Server, Dreambox, "RSS-Tablet"

Doggiebert

oder einfach - ohne es getestet zu haben:
{qx(sudo /opt/fhem/fhem_heatswitch.pl &)}
SW: FHEM 5.5, Raspian, XBMC, Testinstallation auf Win7
HW: Raspi B, 32GB SD, enocean Pi, RFXTRX433E, BSC - MwC-32, Onkyo TX-NR709, Samsung UE55F8090, Jung LS-Eno, permundo SmartPlug, KDG-FB 6490cable (ohne FHEM)

Qualle

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

Doggiebert

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)?
SW: FHEM 5.5, Raspian, XBMC, Testinstallation auf Win7
HW: Raspi B, 32GB SD, enocean Pi, RFXTRX433E, BSC - MwC-32, Onkyo TX-NR709, Samsung UE55F8090, Jung LS-Eno, permundo SmartPlug, KDG-FB 6490cable (ohne FHEM)

Qualle

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

Doggiebert

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)}
SW: FHEM 5.5, Raspian, XBMC, Testinstallation auf Win7
HW: Raspi B, 32GB SD, enocean Pi, RFXTRX433E, BSC - MwC-32, Onkyo TX-NR709, Samsung UE55F8090, Jung LS-Eno, permundo SmartPlug, KDG-FB 6490cable (ohne FHEM)

Qualle

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

pre

#9
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

Qualle

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.  :-\

Qualle

 :) :) :) :) :) ...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

Qualle

 :o Ups, falschen Button erwischt...

{system('sudo -s /bin/sh -c "/opt/fhem/fhem_heatswitch.pl"
')}

Puschel74

Und nochmal bearbeiten und dann meinen angepinnte Beitrag lesen.
Danke.
Zotac BI323 als Server mit DBLog
CUNO für FHT80B, 3 HM-Lan per vCCU, RasPi mit CUL433 für Somfy-Rollo (F2F), RasPi mit I2C(LM75) (F2F), RasPi für Panstamp+Vegetronix +SONOS(F2F)
Ich beantworte keine Supportanfragen per PM! Bitte im Forum suchen oder einen Beitrag erstellen.