FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: oxident am 02 August 2018, 20:55:39

Titel: Ruby-Skript aufrufen?
Beitrag von: oxident am 02 August 2018, 20:55:39
Hallo!
Ich versuche verzweifelt, ein Ruby-Skript aus FHEM heraus aufzurufen. Der Einfachheit halber wollte ich lediglich die Aufrufbarkeit des Interpreters mit {qx(ruby -v)} testen, aber schon das scheitert mit einem PERL WARNING: Can't exec "ruby": Datei oder Verzeichnis nicht gefunden at (eval 763) line 1.

Ruby selbst ist natürlich vorhanden und sogar der fhem-user kann es in der Bash ausführen:root@fhem:/opt/fhem# su - fhem
fhem@fhem:~$ ruby -v
ruby 2.4.4p296 (2018-03-28 revision 63013) [x86_64-linux]

Mir ist aufgefallen, dass dies scheinbar daran liegt, dass bei der Nutzung der Bash diverse Umgebungsvariablen (u.a. PATH) gesetzt werden, jedoch nicht bei der Ausführung von FHEM. Wenn ich den Ruby-Interpreter mit der vollen Pfadangabe in FHEM starte, dann klappt es auch, jedoch findet er dann keine GEMs und auch ein paar sonstige Abhängigkeiten.

Daher meine Frage: Wie kann erreichen, dass FHEM beim Start auch die Umgebungsvariablen des fhem-users erhält?
Titel: Antw:Ruby-Skript aufrufen?
Beitrag von: bugster_de am 03 August 2018, 11:16:49
Ich bin jetzt nicht der Ruby Experte aber ich meine mich dunkel zu errinnern, dass ich für andere Sachen auch bei qx Probleme hatte und nutze deshalb seither immer den system Aufruf.

{system("ruby -v");;}

Ansonsten auch dran denken, dass du das Semikolon am Ende des Befehls zweimal angibst.
Titel: Antw:Ruby-Skript aufrufen?
Beitrag von: Wernieman am 03 August 2018, 11:33:07
Dann gib doch den Ko9mplette Pfad des Interpreters an:
Wo der liegt kannst DU einfach auf der Konsole rausfinden:
Zitatwhereis rubi

Habe keine rubi installiert, kann also nicht sagen, wo es liegt. Wahrscheinlich unter /usr/bin/rubi.
Titel: Antw:Ruby-Skript aufrufen?
Beitrag von: Otto123 am 03 August 2018, 11:40:20
nicht zu vergessen die einfache Methode einfach "Programmname mit Parametern"zu schreiben.
https://commandref.fhem.de/commandref_DE.html#command
Es geht ja primär um FHEM und nicht um Perl?  ;D

Ich empfehle dazu immer einfach ein Shell Script, dort setzt man einfach seine Umgebung wie man sie braucht und ruft es auf mit:
"bash ScriptName.sh"

Übergaben an FHEM macht man dann einfach mit dem zweiten Beispiel in der Commandref in meinem Link. :)

Aber ich habe keine Ahnung von ruby :)

Gruß Otto
Titel: Antw:Ruby-Skript aufrufen?
Beitrag von: oxident am 03 August 2018, 14:19:15
Zitat von: Wernieman am 03 August 2018, 11:33:07
Dann gib doch den Ko9mplette Pfad des Interpreters an:
Ja, dann kann ich prinzipiell auch Ruby aufrufen, nur leider fehlen dem Interpreter dann haufenweise Umgebungsvariablen, z. B. wo er externe Bibliotheken findet.
ZitatIch empfehle dazu immer einfach ein Shell Script, dort setzt man einfach seine Umgebung wie man sie braucht ...
Mein Problem ist, dass ich auch leider nur sehr begrenzt Ahnung von Ruby habe und demnach gar nicht genau weiß, welche Umgebungsvariablen nötig sind. Leider weiß ich nur, dass es läuft, wenn ich es per Bash, also nach Login, ausführe ;-)

Alternativ habe ich gesehen, dass man wohl unter Perl auch "inline" Ruby ausführen kann...
Titel: Antw:Ruby-Skript aufrufen?
Beitrag von: Wernieman am 03 August 2018, 14:33:53
ZitatJa, dann kann ich prinzipiell auch Ruby aufrufen, nur leider fehlen dem Interpreter dann haufenweise Umgebungsvariablen, z. B. wo er externe Bibliotheken findet.
Wenn das wirklich so stimmen würde, würde niemand professionell für Ruby nicht programmiert.

Hintergrund:
Bei jedem Serverdienst werden die Umgebungsvariablen NICHT geladen (übrigens auch nicht bei einem CRON-Aufruf). Probiere es doch einfach mal ;o)
Titel: Antw:Ruby-Skript aufrufen?
Beitrag von: oxident am 03 August 2018, 17:41:31
Komisch, auch wenn ich ruby über ein Shell-Skript starten will, bewusst ohne Pfadangabe, also so, wie ich es auch direkt per SSH-Sitzung machen würde, klappt es nicht:

#!/bin/bash
# Datei: /opt/fhem/test.sh
ruby -v


2018.08.03 17:30:50 3: eval: {qx(./test.sh)}
./test.sh: Zeile 2: ruby: Kommando nicht gefunden.

Ich denke auch, dass Ruby ja eigentlich für Serveranwendungen gedacht ist und es daher wirklich "bulletproof" sein sollte. Könnte es aber vielleicht daran liegen, auf welche "Art" FHEM gestartet wird?
Es scheint mir, als bekäme FHEM selber ja nichtmal die Umgebungsvariablen die ich bekomme, wenn ich mich selber als user fhem anmelde.
Titel: Antw:Ruby-Skript aufrufen?
Beitrag von: Wernieman am 03 August 2018, 19:18:36
Nochmals: Rufe es mit einem Vollen Pfad auf! Gerade weil es "Pfadangabe" laufen muß ...

Bei einem Serverdienst und fhem ist ein soclher, wird normalerweise die "Standardvariablen" wie z.B. der $PFAD nicht mitgeladen. Ist ein Sicherheitsfeature!

Du hast also 2 Möglichkeiten
1. In Deinem Script das Envirenment einbauen (Starten)
2. Mit vollem Pfad starten

2. ist IMMER besser! Mach Dir doch nicht "das Leben schwer", es ist schon schwer (heiß) genug ...
Titel: Antw:Ruby-Skript aufrufen?
Beitrag von: oxident am 03 August 2018, 19:35:05
Zitat von: Wernieman am 03 August 2018, 19:18:362. Mit vollem Pfad starten

2. ist IMMER besser! Mach Dir doch nicht "das Leben schwer", es ist schon schwer (heiß) genug ...
Recht hast Du auf jeden Fall. Hatte gehofft, mich nicht soweit in Ruby "reinfuchsen" zu müssen um herauszubekommen, wie ich jetzt innerhalb der Scripts Pfadangaben schreiben muss, aber das wird jetzt wohl bitte nötig...

Danke für Eure Hilfe!