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 der Quelltext 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, verhält sich aber seltsam. Wenn sie von einer Root-Konsole ausgeführt wird, /home/pi/bin/./app
tritt kein Problem auf. Darüber hinaus bleibt das Skript natürlich autostart.sh
in Ausführung, bis meine Anwendung beendet wird.
Um beide Probleme zu beheben, habe ich versucht, es im Hintergrund auszuführen und &
am Ende hinzuzufügen. Oder ich habe einfach versucht, die Ausgabe in eine Datei umzuleiten und hinzuzufügen &> /home/pi/log.txt
. In beiden Fällen wird meine Anwendung nicht mehr ausgeführt!
Was vermisse ich?
Antwort1
Möglicherweise vermissen Sie Folgendes:
Zum Abschnitt [Service] hinzufügen
Type=oneshot
. Es ist nicht nötig, es im Hintergrund zu lassen, und die Umleitung der Ausgabe in eine Datei funktioniert in der Konfigurationsdatei ohnehin nicht. Die Ausgabe wird bereits erfasst und mit demStandardOutput
Schlüssel umgeleitet, der sie standardmäßig an das systemd-Journal sendet.Außerdem führt das bloße Erstellen der Datei nicht automatisch zur Ausführung, Sie müssen sie auch aktivieren. Führen Sie
systemctl enable autostart
Ich möchte auch darauf hinweisen, dass Sie die Anwendung als Root ausführen /home/pi/bin/app
, was aus Sicherheitsgründen möglicherweise nicht das ist, was Sie möchten. Wenn es nicht unbedingt erforderlich ist, die Anwendung als Root auszuführen, sollten Sie die Anwendung als anderer Benutzer ausführen.