Ausführen eines Skripts, das andere Anwendungen mit dem systemd-Dienst startet

1118
Robert

Unsere C ++ Qt-Anwendung wird grafisch ohne X ausgeführt, indem der -qwsSchalter angegeben wird. Aus diesem Grund habe ich die grafische Umgebung des BeagleBone Black deinstalliert und deaktiviert. Wenn ich nun die Platine anschalte, bekomme ich den Standard-Anmeldebildschirm.

Wenn ich mich mit einem leeren Kennwort als root anmelde, kann ich ein Skript ausführen, das einige Einstellungen für den Touchscreen usw. vornimmt und dann unsere Anwendung startet. Das funktioniert einwandfrei.

Jetzt müssen wir diese Anwendung bei jedem Start automatisch starten, da das gesamte Bundle in einem Industrie-Schrank ohne Tastatur oder Maus im Einsatz sein soll. Um dies zu erreichen, habe ich einen systemd-Dienst erstellt, der aber leider nicht funktioniert. Wenn ich das System neu starte, wird unsere Anwendung für den Bruchteil einer Sekunde angezeigt, aber sie bricht fast sofort zusammen und kehrt zum Anmeldebildschirm zurück.

Wenn ich mich anmelde und versuche, den Dienst zu starten, funktioniert er auch nicht. Das systemctl status ivt.servicesagt was :

ivt.service - IVT Startup Routines Loaded: loaded (/lib/systemd/system/ivt.service; enabled) Active: failed (Result: exit-code) since Sat 2000-01-01 00:35:26 UTC; 1min 39s ago Process: 499 ExecStart=/usr/bin/ivtstartup.sh (code=exited, status=139) Main PID: 403 (code=exited, status=139) CGroup: name=systemd:/system/ivt.service  Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Shutdown clients... Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Shutdown servers... Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Shutdown PaPort1 ... Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: PaPort1 shutdown completed. Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: SYSTEM-SHUTDOWN COMPLETE. Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Unload drivers... Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: CSystemManager::UnloadServers PaPort1 Jan 01 00:35:26 beaglebone ivtstartup.sh[499]: Unload drivers completed. Jan 01 00:35:26 beaglebone systemd[1]: Failed to start IVT Startup Routines. Jan 01 00:35:26 beaglebone systemd[1]: Unit ivt.service entered failed state 

Dies ist das Skript, das ich mit dem Dienst (at /usr/bin/ivtstartup.sh) ausführen möchte :

#!/bin/bash ifconfig eth0 172.17.6.136 netmask 255.255.248.0 up route add default gw 172.17.1.200 echo "nameserver 172.17.1.51" > /etc/resolv.conf ln -s /dev/ttyO2 /dev/ttyM0 /home/root/testbg & ( export TSLIB_TSDEVICE="/dev/input/touchscreen0"; export TSLIB_CALIBFILE="/etc/pointercal"; export QWS_MOUSE_PROTO="Tslib:/dev/input/touchscreen0"; bash -c '/home/root/testgui -qws'; ) 

Und schließlich ist dies der Service /etc/systemd/system/ivt.service:

[Unit] Description=IVT Startup Routines  [Service] Type=forking ExecStart=/usr/bin/ivtstartup.sh  [Install] WantedBy=multi-user.target 

Wenn ich mich anmelde und dann /usr/bin/ivtstartup.shmanuell ausführt, funktioniert alles. Die Anwendung testbgläuft im Hintergrund (wird für einige serielle Kommunikation usw. verwendet), und die Anwendung wird testguiwie erwartet angezeigt.

Was ist das Problem mit dieser Konfiguration? Gibt es eine andere Möglichkeit, einen automatischen Start dieses Skripts zu erreichen, ohne sich manuell anmelden zu müssen? Danke im Voraus!

1
Vielleicht findest du in diesem Beitrag eine Antwort? [So führen Sie ein Shell-Skript beim Start aus] (https://stackoverflow.com/questions/12973777/how-to-run-a-shell-script-at-startup/12973826#12973826) JeromeLEKIEFFRE vor 6 Jahren 0

0 Antworten auf die Frage