at soll shellscript ausführen und rückgabe weitersenden

Begonnen von accessburn, 24 Juli 2018, 09:27:13

Vorheriges Thema - Nächstes Thema

accessburn

Kann mir jemand sagen warum das nicht funktioniert?

Die Antwort ist immer "-1".

*12:15:00 {
my $rueckgabe = system("sudo bash /opt/fhem/ftp_upload.sh &");;
fhem("set Telegram message $rueckgabe;;");;
}
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

betateilchen

Es funktioniert doch völlig korrekt?


  • system() liefert als Rückgabewert immer den Exit-Status des aufgerufenen Programmes
  • Da Du das Programm mit & am Ende aufrufst (warum auch immer...) kann perl den Exit Status aber nicht ermitteln und liefert -1 zurück

Insofern: alles gut. Das steht übrigens auch alles in der Dokumentation zur perl Funktion system() http://perldoc.perl.org/functions/system.html Und dort steht auch die Lösung für das, was Du eigentlich wirklich haben möchtest: Das Ergebnis des Programmaufrufs zurückbekommen. Aber lesen musst Du bitte selbst.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

CoolTux

Weil die Funktion system()  nichts liefert als den Exit Status. Dazu kommt noch Dein & am Ende des Aufrufes was jeglichen Rückkanal dicht macht.

Wenn dann qx() und ohne & Aber dann wartet FHEM so lange bis das Skript durch ist und blockiert.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Beta-User

Wenn es nicht blockierend sein soll, wäre evtl. eher sowas anzuraten:

https://forum.fhem.de/index.php/topic,88398.msg808685.html#msg808685

Dann müßte der Aufruf für die Telegram-Message halt im aufgerufenen Script stehen...
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

accessburn

Zitat von: Beta-User am 24 Juli 2018, 09:42:59
Wenn es nicht blockierend sein soll, wäre evtl. eher sowas anzuraten:

https://forum.fhem.de/index.php/topic,88398.msg808685.html#msg808685

Dann müßte der Aufruf für die Telegram-Message halt im aufgerufenen Script stehen...

Das war der Hintergrund. Eigentlich steht der Telegramteil in dem Shellscript, wird aber nicht ausgeführt. Von Hand ja, wenn ich aber im AT einfach nur das Shellscript ausführen lasse geht es nicht. Blockiert hat es ohne ein "&", mit nur -1.
Dache das evtl. noch ein anderer Denkfehler dabei ist.

Doofe Sache jetzt...
Wezzy Rpi2b> FHEM, Elro, Intenso, FTUI, Jeelink v3, Max!Cube, Fire5, Foscam, NAS, Fritz!Box + Fon, Max!Wandthermostat, Amazon Echo
Wezzy Rp3b> OctoPi
Jessie Rp3b> UPNP, NAS, Pi-Hole

Beta-User

Definiere "von Hand ja":

Soll das bedeuten, dass du es von der Konsole aus ausführen kannst? Mit welchem User? Anders gefragt: darf User fhem das script ausführen?
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors

helmut

Zitat von: betateilchen am 24 Juli 2018, 09:37:11
system() liefert als Rückgabewert immer den Exit-Status des aufgerufenen Programmes
Das waere schoen, funktioniert aber nicht. system liefert beharrlich -1 zurueck, warum auch immer.

       
  • {qx(id)} gibt erwartungsgemaess die id des aktuellen Nutzers aus, aber
  • {system("id")} liefert -1 ab.
Gruss Helmut
Intelligenz ist die Fähigkeit, Arbeit zu vermeiden, aber dafür zu sorgen, daß die Arbeit gemacht wird.
(Linus Torvalds)

mumpitzstuff

https://forum.fhem.de/index.php/topic,88398.msg808685.html#msg808685

Wie oben bereits schon mal gesagt: Hier steht alles.

Mach den Aufruf deines Skriptes wie hier beschrieben und mach das set dann INNERHALB deines Skriptes.

define at_FTP_UPLOAD at *12:15:00 "sudo bash /opt/fhem/ftp_upload.sh"

und in deinem Script fügst du am Schluss das hier ein:

perl fhem.pl 7073 "set Telegram message $myRueckgabe"

Wie man aus einem sh Script Perl aufruft, kann ich dir im Moment nicht sagen, ich schreibe so gut wie keine Shell Skripte.

Beta-User

Zitat von: mumpitzstuff am 25 Juli 2018, 16:18:01
Wie man aus einem sh Script Perl aufruft, kann ich dir im Moment nicht sagen, ich schreibe so gut wie keine Shell Skripte.
Wenn jemand eine Vorlage dazu sucht: Der Klassiker dazu dürfte das init.d-Script sein ;) . https://svn.fhem.de/trac/browser/trunk/fhem/contrib/init-scripts/fhem.3
Server: HP-elitedesk@Debian 12, aktuelles FHEM@ConfigDB | CUL_HM (VCCU) | MQTT2: ZigBee2mqtt, MiLight@ESP-GW, BT@OpenMQTTGw | ZWave | SIGNALduino | MapleCUN | RHASSPY
svn: u.a Weekday-&RandomTimer, Twilight,  div. attrTemplate-files, MySensors