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;;");;
}
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.
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.
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...
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...
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?
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
https://forum.fhem.de/index.php/topic,88398.msg808685.html#msg808685 (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.
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