Heißt dein systemd file nicht sonosapistart.service?
Dann müsstest du:
sudo systemctl enable sonosapistart
sudo systemctl restart sonosapistart
sudo journalctl -au sonosapistart
verwenden.
Stefan
Heißt dein systemd file nicht sonosapistart.service?
Dann müsstest du:
sudo systemctl enable sonosapistart
sudo systemctl restart sonosapistart
sudo journalctl -au sonosapistart
verwenden.
Stefan
Nur um noch einmal auf Nr. sicher zu gehen:
Meine zuvor bestehende Datei: sonosapistart.sh habe in den Ordner /home/pi verschoben.
ich habe unter dem Pfad /etc/systemd/system/ folgende Datei erstellt: sonos-http-api-master.service
mit dem Inhalt:
[Unit]
Description=Sonos API
After=network-online.target
Wants=network-online.target
[Service]
User=sonosapi
WorkingDirectory=/home/pi/node-sonos-http-api-master
ExecStart=/usr/bin/node server.js
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
Alles anzeigen
Dann habe ich folgende Befehle abesetzt:
sudo systemctl daemon-reload
sudo systemctl enable sonos-http-api-master
sudo systemctl restart sonos-http-api-master
sudo journalctl -au sonos-http-api-master
Dann bin ich bei der Fehlerschleife gelandet.
Mar 05 10:03:12 raspberrypi systemd[1]: sonos-http-api-master.service: Main process exited, code=exited, status=217/USER
Mar 05 10:03:12 raspberrypi systemd[1]: sonos-http-api-master.service: Unit entered failed state.
Mar 05 10:03:12 raspberrypi systemd[1]: sonos-http-api-master.service: Failed with result 'exit-code'.
Mar 05 10:03:42 raspberrypi systemd[1]: sonos-http-api-master.service: Service hold-off time over, scheduling restart.
Mar 05 10:03:42 raspberrypi systemd[1]: Stopped Sonos API.
Mar 05 10:03:42 raspberrypi systemd[1]: Started Sonos API.
Kann es sein, dass der Fehler Status=217 /User auf ein Problem mit dem User=sonosapi hinweist?!
Nachtrag:
Ok .. mit dem User PI scheint der Dienst jetzt gestartet zu sein!
Vielen vielen Dank!
Der User sonosapi wollte auf das HomeVerzeichnis von pi zugreifen, und ich schätze, da hats geknallt:
User=sonosapi
WorkingDirectory=/home/pi/node-sonos-http-api-master
Das passt nicht zusammen. Wenn der Dienst unter dem User sonosapi laufen soll, dann kopiere das Verzeichnis node-sonos-http-api-master in das Homeverzeichnis von User sonosapi.
sudo cp -av /home/pi/node-sonos-http-api-master /home/sonosapi
sudo chown -R sonosapi:sonosapi /home/sonosapi/node-sonos-http-api-master
und passe in /etc/systemd/system/sonos-http-api-master.service das WorkingDirectory an:
User=sonosapi
WorkingDirectory=/home/sonosapi/node-sonos-http-api-master
Dann sollte es klappen.
Stefan
Es läuft jetzt wunderbar unter dem User "Pi".
Jetzt muss ich wohl mal das homebridge-http einrichten, damit ich auch die Befehle in Homekit darstellen kann.
Auf Wunsch kann ich auch gern nochmal eine komplette Anleitung fertig machen mit der Installation der Pakete und allem drum und dran.
sschuste Möge Dein Feierabendbierchen heute ganz besonders gut schmecken! Vielen Dank für die reichhaltigen Tipps und Anleitungshinweise!
war ja klar das es bei mir nicht glatt läuft
Ich bekomme beim Befehl sudo systemctl enable sonos-http-api-master immer
Failed to execute operation: No such file or directory
egal ob ich User=Pi oder User=root eintrage. und bei ExecStart=/usr/bin/node server.js oder ExecStart=/usr/local/bin/node server.js eintrage.
which node gibt jedenfalls /usr/local/bin/node aus...
Keine Ahnung
Ich hab das doch richtig verstanden das ich das Startscript nicht benötige bei Systemd? Denn das ist bei mir nicht vorhanden.
Trag mal für node als Pfad nur
/usr/bin/node server.js ein.
Du musst unter /etc/systemd/system nur die Datei sonos-http-api-master.service mit dem Inhalt anlegen. Wenn Dein Ordner node-sonos-http-api-master Im /home/pi Verzeichnis liegt sollte die Config so für dich passen:
Also die Datei anlegen mit:
Dann folgenden inhalt einfügen:
[Unit]
Description=Sonos API
After=network-online.target
Wants=network-online.target
[Service]
User=pi
WorkingDirectory=/home/pi/node-sonos-http-api-master
ExecStart=/usr/bin/node server.js
Restart=on-failure
RestartSec=30
[Install]
WantedBy=multi-user.target
Alles anzeigen
anschließend die 4 Befehle absetzen
sudo systemctl daemon-reload
sudo systemctl enable sonos-http-api-master
sudo systemctl restart sonos-http-api-master
sudo journalctl -au sonos-http-api-master
Jetzt hat es komischerweise geklappt aber jetzt steckt es an einer anderen stelle:
Mär 07 20:52:13 homebridge2 systemd[1]: Stopping Sonos API...
Mär 07 20:52:13 homebridge2 systemd[1]: Starting Sonos API...
Mär 07 20:52:13 homebridge2 systemd[1]: Started Sonos API.
Mär 07 20:52:13 homebridge2 systemd[1]: sonos-http-api-master.service: main process exited, code=exited, status=203/EXEC
Mär 07 20:52:13 homebridge2 systemd[1]: Unit sonos-http-api-master.service entered failed state.
Mär 07 20:52:44 homebridge2 systemd[1]: sonos-http-api-master.service holdoff time over, scheduling restart.
Mär 07 20:52:44 homebridge2 systemd[1]: Stopping Sonos API...
Mär 07 20:52:44 homebridge2 systemd[1]: Starting Sonos API...
Mär 07 20:52:44 homebridge2 systemd[1]: Started Sonos API.
Das ist jetzt wohl eher wieder was für die Linux Pros
Irgendwie scheint er evtl ein Rechte Problem zu haben beim Starten?
Status203/exec könnte man hierzu googeln.
Bei mir war es ja status217/User wodurch ich wusste das es am eingestellten User im Script lag
Prima. Noch mal als Tipp für diejenigen, die noch basteln: wer wissen will, was er hier für ExecStart eingeben soll, kann das mit
which node
ermitteln. Which liefert den kompletten Pfad eines Programms zurück (in den meisten Fällen).
Und ja, Maz, das Startscript, das vorher in /etc/init.d herumgammelte, sollte entfernt werden. Systemd erledigt dann alles von völlig allein. Alles richtig gemacht.
Das könnt ihr übrigens auch für homebridge machen. Ein echter Nutzen liegt auch darin, dass ein Service, der gecrasht ist, von systemd automatisch wieder gestartet wird. Erhöht den WAF um glatte 5 Punkte.
Stefan
Bei mir liegt node auch in /usr/bin
Stefan
Das wird vermutlich bei fast allen so sein.
Bei einem "which node" bekommt man als Rückmeldung nur /usr/local/bin/
Ich habe auch alles gerade einmal probiert, bekomme aber immer folgende Fehlermeldung:
Mär 11 11:46:57 raspberrypi systemd[1]: Stopped Sonos API.
Mär 11 11:46:57 raspberrypi systemd[1]: Started Sonos API.
Mär 11 11:46:57 raspberrypi systemd[1]: sonos-http-api-master.service: Main process exited, code=exited, status=217/USER
Mär 11 11:46:57 raspberrypi systemd[1]: sonos-http-api-master.service: Unit entered failed state.
Mär 11 11:46:57 raspberrypi systemd[1]: sonos-http-api-master.service: Failed with result 'exit-code'.
Ordnerstruktur bei mir:
home/pi/node-sonos-http-api-master
which node -> /usr/local/bin/node
Bei mir war es der User=sonos-api den ich auf User=pi ändern musste bei der Fehlermeldung. Dies hast Du ja schon angepasst.
Probier mal ob der Fehler auch kommt wenn du für ExecStart=/usr/bin/node server.js setzt.
Egal was ich eingebe, die Fehlermeldung habe ich komischerweise immer.
Habe jetzt aber mehrfach meinen Rasp und auch die Homebridge neugestartet es funktioniert bis jetzt noch alles perfekt obwohl die Meldung noch kommt
Solange es funktioniert ist alles gut
Vermutlich hast du in dem Logfile nicht bis zum Ende gescrollt und immer nur den Fehler am Anfang gesehen der evtl vor ein paar Stunden auftrat.
Wenn du hier mal zum Ende scrollst wirst Du vermutlich sehen, dass der Dienst sauber läuft.
Hat es hier jemand schonmal geschafft den aktuellen Status der API mithilfe von zB. homebridge-http oder homebridge-http-switch auszulesen?
Ich würde gerne den Status des Midnight-Mode auslesen (aktiviert oder nicht aktiviert).
Was ist denn der Midnight Mode?
Ich würde gerne meine Spotify Playlisten damit abrufen aber irgendwie hab ich es noch nicht geschafft. Ich glaube man muss sich dafür registrieren.