Alexa-fhem als Dienst

Begonnen von d.stratmann, 06 Mai 2017, 19:46:15

Vorheriges Thema - Nächstes Thema

d.stratmann

Hallo,

ich habe mich an dem Wiki Eintrag langgehangelt, habe aber einen Fehler beim Einrichten bzw. eigentlich beim Starten des Dienstes.

Ich bekomme dort den Fehler: ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS (code=exited, status=1/FAILURE)

Wenn ich das jetzt richtig herausgefunden habe druch Testen mit dem direkten Befehl "/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS" auf der Console wird dann angezeigt, dass er die key file nicht findet.
Gibts hier auch einen Parameter für die key-file?

MadMax-FHEM

Statt zu beschreiben was auf der Console kommt poste doch einfach GENAU was kommt, also copy+paste hier in code-Tags (das # im Menu)...
...am besten noch mit genau dem Befehl den du eingibst und als welcher User du das tust.

Auf welchem System?

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

d.stratmann

Hallo Joachim,

System ist ein Debian 8 (ist eine VM)
Benutzer bei der Installation und Ausführung war root

sudo systemctl status alexa:
● alexa.service - Node.js Alexa Server
   Loaded: loaded (/etc/systemd/system/alexa.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since Sa 2017-05-06 20:             55:14 CEST; 2s ago
  Process: 779 ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS (code=exited             , status=1/FAILURE)
Main PID: 779 (code=exited, status=1/FAILURE)


/opt/fhem/alexa-fhem/bin/alexa -U /opt/fhem/alexa-fhem/
[2017-05-06 20:57:11] using /opt/fhem/alexa-fhem/config.json
[2017-05-06 20:57:11] ---
[2017-05-06 20:57:11] this is alexa-fhem 0.3.4
fs.js:549
  return binding.open(pathModule._makeLong(path), stringToFlags(flags), mode);
                 ^

Error: ENOENT: no such file or directory, open './key.pem'
    at Error (native)
    at Object.fs.openSync (fs.js:549:18)
    at Object.fs.readFileSync (fs.js:397:15)
    at Server.startServer (/opt/fhem/alexa-fhem/lib/server.js:119:15)
    at Server.run (/opt/fhem/alexa-fhem/lib/server.js:240:8)
    at module.exports (/opt/fhem/alexa-fhem/lib/cli.js:30:10)
    at Object.<anonymous> (/opt/fhem/alexa-fhem/bin/alexa:17:22)
    at Module._compile (module.js:409:26)
    at Object.Module._extensions..js (module.js:416:10)
    at Module.load (module.js:343:32)


Wenn ich das jetzt richtig intepretiert habe, wird der Dienste ja aus dem "Wurzelverzeichnis" gestartet und kann natürlich die key file nicht finden.Ich habe dann zum testen die key und cert direkt ins Wurzelverzeichnis der HDD kopiert und dann funktioniert es, also Dienst startet und Sprachbefehle werden verarbeitet!

Daher die Frage, gibts nicht auch einen Parameter für die Pfadangabe für die key und cert?

amenomade

Ich glaube, ich habe ein ähnliches Problem : https://forum.fhem.de/index.php/topic,60452.msg631255.html#msg631255
Dewegen habe ich folgendes versucht:
WorkingDirectory=/opt/fhem/alexa-fhem # test falls die irgendwas mit relativ Path sucht. Ohne diese Linie funktioniert auch nicht


Leider ohne Erfolg.
Gruß
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

amenomade

Die Frage ist: was bedeutet ./key.pem?

. = Homedir vom User in alexa.service?
. = Homedir vom User, der alexa startet (im Fall von systemd vermutlich /root - ich habe aber auch veruscht, die *.pem in /root zu kopieren, ohne Erfolg
. = /etc/default ?
. = ???

Gruß
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

d.stratmann

@amenomade

Kopier die key mal eine Ebene höher, dann sollte es gehen, halte ich aber persönlich für keine tolle Option, daher die Frage nach einem Parameter zur Angabe des Pfades.

amenomade

Welche Ebene? Konkret in welchem Verzeichnis?

Gruß
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

d.stratmann

Direkt unter sda
Bzw. für Windows direkt unter C:

MadMax-FHEM

#8
Hallo,

ich habe ja noch nicht viel mit systemd gearbeitet, bei mir läuft es noch mit dem Startscript unter /etc/init.d/

Aber dort wird explizit angegeben von wo gestartet werden soll...
...also das ./key.pem etc. bezieht sich halt immer darauf "wo" der User gerade "steht"...
Bei euch wohl unter '/' also "root"...

Evtl. geht es wenn ihr folgendes in das "Startscript" einfügt:

ExecStartPre=cd /opt/fhem/alexa-fhem/
(bzw. halt den Pfad anpassen)


[Unit]
Description=Node.js Alexa Server
After=syslog.target network-online.target

[Service]
Type=simple
User=alexa #oder ein anderer Benutzer wie fhem
EnvironmentFile=/etc/default/alexa
# oder wo auch immer eure alexa-fhem liegt
ExecStartPre=cd /opt/fhem/alexa-fhem/
ExecStart=/opt/fhem/alexa-fhem/bin/alexa $ALEXA_OPTS
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target



Dann "steht" der User evtl./hoffentlich bereits dort wo die Dateien mittels ./key.pem etc. gefunden werden...

Vielleicht auch (da es heißt immer vollen Pfad zum "Programm/Befehl") mal 'which cd' eingeben und dann den vollen Pfad von 'cd' statt nur 'cd'...

Ob es bei den Aufrufen eine Möglichkeit der Pfadangabe gibt weiß ich leider nicht...

EDIT: oder den "Parameter" WorkingDirectory=/opt/fhem/alexa-fhem/ siehe auch hier: https://wiki.ubuntuusers.de/systemd/Service_Units/

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

amenomade

#9
Wie oben schon gesagt: WorkingDirectory geht nicht. Ich prüfe mit ExecStartPre.

Gruß

EDIT: Ne, ExecStartPre hilft nicht:
pi@raspberrypi:/etc/systemd/system $ sudo leafpad alexa.service
pi@raspberrypi:/etc/systemd/system $ sudo systemctl stop alexa
Warning: Unit file of alexa.service changed on disk, 'systemctl daemon-reload' recommended.
pi@raspberrypi:/etc/systemd/system $ sudo systemctl daemon-reload
pi@raspberrypi:/etc/systemd/system $ sudo systemctl start alexa
pi@raspberrypi:/etc/systemd/system $ sudo systemctl status alexa
● alexa.service - Node.js Alexa Server
   Loaded: loaded (/etc/systemd/system/alexa.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since dim. 2017-05-07 00:46:30 CEST; 5s ago
  Process: 20058 ExecStart=/opt/fhem/alexa-fhem/bin/alexa -D -U /home/pi/.alexa (code=exited, status=217/USER)
Main PID: 20058 (code=exited, status=217/USER)


Jetzt versuche ich mit *.pem in /
EDIT: mit key.pem, cert.pem und config.json in /, geht auch nicht.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

vbs

Weiß nicht obs hilft, aber so sieht das Script bei mir aus (funktionierend):
[Unit]
Description=Alexa FHEM Bridge
Documentation=

[Service]
Type=simple
User=alexa
Restart=on-failure
PermissionsStartOnly=true
PIDFile=/var/run/alexa-fhem.pid
WorkingDirectory=/opt/minion/etc/alexa-fhem
ExecStart=/opt/alexa-fhem/bin/alexa -U /opt/minion/etc/alexa-fhem -D


In "/opt/alexa-fhem" liegt alexa-fhem und in "/opt/minion/etc/alexa-fhem" liegt:
-rw-r--r--  1 alexa vbs  1391 Feb  3 20:32 cert.pem
-rw-r--r--  1 alexa vbs   520 Feb 19 19:17 config.json
-rw-r--r--  1 alexa vbs   573 Feb 19 15:59 config-sample.json
-rw-r--r--  1 alexa vbs  1675 Feb  3 20:32 key.pem

MadMax-FHEM

Dem Link bist du gefolgt und hast gelesen wie man die Datei bearbeiten muss!?

Wie gesagt ich mache nicht viel mit systemd aber auch bei anderen Config-Dateien unter Linux reicht es oft nicht einfach nur die Datei (Inhalt) zu ändern...

Wenn das beachtet wurde und auch nicht hilft, dann kann ich leider nicht mehr helfen...

Gruß, Joachim
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

amenomade

#12
Hab's geschaft mit
[Service]
Type=simple
User=pi
WorkingDirectory=/opt/fhem/alexa-fhem
ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/pi/.alexa


Jetzt läuft es unter User pi und nicht alexa. Aber ich bin schon mal weiter, danke! Jetzt glaube ich, dass mein Problem ist, dass der User alexa kein Zugriff u.a. auf /home/pi hat.

Zur Info, ExecStartPre=cd <verzeichnis> kann nicht funktionieren, da dieses Parameter nur absolute Path nimmt, und cd "nur" ein Teil des Shells ist.

Gruß

EDIT:
Jepp das war es
. Danke an euch beide. @vbs: dein ls auf /opt/minion/etc/alexa-fhem hat mir den Hinweis gegeben!

Jetzt läuft es mit:

/etc/systemd/system/alexa.service
[Unit]
Description=Node.js Alexa Server
After=syslog.target network-online.target

[Service]
Type=simple
User=alexa
WorkingDirectory=/opt/fhem/alexa-fhem
ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa
Restart=on-failure
RestartSec=10
KillMode=process

[Install]
WantedBy=multi-user.target


/home/alexa/.alexa:
-rw-r--r-- 1 alexa alexa 1216 mai    7 02:14 cert.pem
-rw-r--r-- 1 alexa alexa  652 mai    7 02:14 config.json
-r-------- 1 alexa alexa 1679 mai    7 02:14 key.pem


Mensch... zwei Tage verloren mit diesem Anfängerfehler!
Gruß
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

d.stratmann

Danke,

der Eintrag WorkingDirectory führte zum gewünschten Ergebniss!

juemuc

#14
Hallo,

leider bekomme ich auch diese Fehlermeldung:
Zitatalexa.service - Node.js Alexa Server
   Loaded: loaded (/etc/systemd/system/alexa.service; enabled)
   Active: activating (auto-restart) (Result: exit-code) since So 2017-07-30 21:57:29 CEST; 405ms ago
  Process: 2059 ExecStart=/opt/fhem/alexa-fhem/bin/alexa -U /home/alexa/.alexa (code=exited, status=217/USER)
Main PID: 2059 (code=exited, status=217/USER)

Jul 30 21:57:29 raspberrypi systemd[1]: Unit alexa.service entered failed state.

Ich habe schon alle Tipps, die hier gegeben wurden, ausprobiert, aber leider keinen Erfolg gehabt. Manuell kann ich alexa-fhem über ./bin/alexa starten.

Die Datei config.json liegt im Homeverzeichnis des Users pi. Alles andere im Verzeichnis /opt/fhem/alexa-fhem/ bzw in den im Wiki angegebenen Verzeichnissen. Wer hat eine Idee?

Vielleicht hilft noch folgende Info. Im Gegensatz zur Beschreibung im Wiki musste ich alle Schritte mit "sudo" durchführen, da sonst die Installation nicht möglich war (keine Rechte).

Viele Grüße
Jürgen
3x Sonos Play 1, 1x Sonos Arc + Sub, 1 Sonos-One, 1x Sonos Playbar
FB6690 + FB7490 mit 4x Dect 200 und 3 Dect-ULE-Thermostate,  raspberry3B+, HM Funkmodul HM-MOD-RPI-PCB, HM Klingelsensor HM-Sen-DB-PCB, HM (IP) Fensterkontakte und  Amazon Echo Dot,  piVCCU, pi OS (bookworm).