In Raspbian Stretch Lite habe ich den folgenden systemd Service:Systemd Service: Blob-Daten und Rückgabecode
[Unit]
Description=Autostart
After=multi-user.target
[Service]
Type=forking
ExecStart=/home/pi/autostart.sh
User=pi
Group=pi
[Install]
WantedBy=multi-user.target
Hier wird der Inhalt von autostart.sh:
#!/bin/sh -ex
export TERM=linux
clear
mkdir -p /home/pi/logs
/home/pi/bin/./TestApp&
Das Skript tatsächlich ausgeführt wird (Ich habe ein Debug-Echo zu einer Datei hinzugefügt, aber die Anwendung wird nicht gestartet. Es ist eine Qt5-Konsolenanwendung, keine grafische Benutzeroberfläche.
Der Versuch, das Skript manuell zu starten (d. H. ./autostart.sh
) funktioniert wie erwartet. Stattdessen manuell starten, der Dienst an diesen Ausgang führt:
$ sudo systemctl start autostart.service
$ systemctl status autostart.service
● autostart.service - Autostart
Loaded: loaded (/lib/systemd/system/autostart.service; enabled; vendor preset: enabled)
Active: failed (Result: exit-code) since Thu 2017-09-28 19:56:33 CEST; 9s ago
Process: 1351 ExecStart=/home/pi/autostart.sh (code=exited, status=0/SUCCESS)
Main PID: 1354 (code=exited, status=127)
Sep 28 19:56:33 localhost systemd[1]: Starting Autostart...
Sep 28 19:56:33 localhost autostart.sh[1351]: + export TERM=linux
Sep 28 19:56:33 localhost autostart.sh[1351]: + clear
Sep 28 19:56:33 localhost autostart.sh[1351]: [34B blob data]
Sep 28 19:56:33 localhost systemd[1]: Started Autostart.
Sep 28 19:56:33 localhost systemd[1]: autostart.service: Main process exited, code=exited, status=127/n/a
Sep 28 19:56:33 localhost systemd[1]: autostart.service: Unit entered failed state.
Sep 28 19:56:33 localhost systemd[1]: autostart.service: Failed with result 'exit-code'.
Es ist in Ordnung, der mkdir Befehl nicht ausgeführt wird (das Verzeichnis bereits vorhanden ist), aber ich verstehe nicht, warum Anwendung nicht ausgeführt wird.
Was könnte ich tun, um mehr Informationen über das, was passiert, zu erhalten?
Dort heißt es: „autostart.service: Service verfügt über mehr als eine ExecStart = Einstellung, die nur für Typ = oneshot Dienste erlaubt verweigert..“. Wie auch immer, ich löste das Verschieben des 'mkdir'-Befehls in einem anderen Skript, das früher ausgeführt wurde. – Mark