Raspbian Jessie: Startskript funktioniert nicht

822
Mark

Ich verwende Raspbian Jessie Lite auf RPi3. Ich habe eine Datei erstellt in /etc/systemd/system/autostart.service:

[Unit] Description=Application  [Service] User=root ExecStart=/home/pi/autostart.sh  [Install] WantedBy=multi-user.target 

Der Dienst ist korrekt aktiviert und wird tatsächlich ausgeführt. Hier die Quelle meines Startskripts:

#!/bin/sh aplay -c2 -r48000 -fS16_LE < /dev/zero & chmod 1777 /tmp hciconfig hci0 up /home/pi/bin/./app 

Meine App wird ausgeführt, weist jedoch ein seltsames Verhalten auf, während sie von einer Root-Konsole aus ausgeführt wird, da dies /home/pi/bin/./appzu keinem Problem führt. Darüber hinaus autostart.shbleibt das Skript natürlich in Ausführung, bis meine Anwendung beendet ist.

Um beide Probleme zu beheben, habe ich versucht, es im Hintergrund auszuführen und &am Ende hinzuzufügen . Oder Sie haben einfach versucht, die Ausgabe in eine Datei umzuleiten &> /home/pi/log.txt. In beiden Fällen wird meine Bewerbung nicht mehr ausgeführt!

Was vermisse ich?

0

1 Antwort auf die Frage

0
Mark Stosberg

Sie können diese Dinge vermissen:

  1. Fügen Sie Type=oneshotden Abschnitt [Service] hinzu. Es ist nicht notwendig, den Hintergrund zu erstellen, und das Umleiten der Ausgabe in eine Datei funktioniert sowieso nicht in der Konfigurationsdatei. Die Ausgabe wird bereits erfasst und mit dem StandardOutputSchlüssel umgeleitet, der standardmäßig an das systemd-Journal gesendet wird.

  2. Auch das einfache Erstellen der Datei wird nicht ausgeführt, sondern muss aktiviert werden. Lauf

    systemctl enable autostart 

Ich stelle auch fest, dass Sie /home/pi/bin/appals root laufen, was möglicherweise nicht das ist, was Sie aus Sicherheitsgründen wollen. Wenn Sie es nicht als root ausführen müssen, sollten Sie Ihre App als anderen Benutzer ausführen.

Ich habe meine Frage bearbeitet, der Dienst ist bereits aktiviert. Ich werde die Einstellungen von 'oneshot' ausprobieren. Nach weiterem Graben endete das Problem damit, dass bei der Ausführung meiner Anwendung einige Umgebungsvariablen nicht festgelegt wurden. Ich habe sie aus `/ etc / profile` exportiert. Vielleicht werden sie (noch nicht?) Von systemd gelesen. Mark vor 7 Jahren 0
Um die Umgebungsvariablen für systemd bereitzustellen, verwenden Sie entweder die [`Environment =`] (https://www.freedesktop.org/software/systemd/man/systemd.exec.html#Environment=) o [`PassEnvironment =` ] (https://www.freedesktop.org/software/systemd/man/systemd.exec.html#PassEnvironment=) wie in der Dokumentation angegeben. Mark Stosberg vor 7 Jahren 1