Запуск скрипта, который запускает другие приложения с использованием сервиса systemd

1051
Robert

Наше приложение C ++ Qt графически запускается без X с указанием -qwsпереключателя. Из-за этого я удалил и отключил графическое окружение на BeagleBone Black. Теперь, когда я включаю плату, я получаю стандартный текстовый экран входа в систему.

Когда я вхожу в систему как root с пустым паролем, я могу запустить скрипт, который устанавливает некоторые настройки для сенсорного экрана и т. Д., А затем запускает наше приложение. Это работает без нареканий.

Теперь нам нужно автоматически запускать это приложение при каждой загрузке, так как предполагается, что весь комплект будет дежурным в каком-то промышленном шкафу без какой-либо клавиатуры или мыши. Для этого я создал сервис systemd, но, к сожалению, он не работает. Когда я перезагружаю систему, наше приложение появляется на долю секунды, но почти мгновенно сворачивается и возвращается к экрану входа в систему.

Когда я вхожу в систему и пытаюсь запустить службу, она также не работает. Вот что systemctl status ivt.serviceговорит:

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 

Это скрипт, который я хочу выполнить со службой (в /usr/bin/ivtstartup.sh):

#!/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'; ) 

И, наконец, это сервис /etc/systemd/system/ivt.service:

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

Когда я вхожу и запускаю /usr/bin/ivtstartup.shвручную, все работает. Приложение testbgработает в фоновом режиме (используется для некоторой последовательной связи и т. Д.), И testguiотображается и работает, как ожидалось.

В чем проблема с этой конфигурацией? Есть ли другой способ автоматического запуска этого скрипта без входа в систему вручную? Заранее спасибо!

1
Может быть, вы найдете ответ в этом посте? [Как запускать сценарий оболочки при запуске] (https://stackoverflow.com/questions/12973777/how-to-run-a-shell-script-at-startup/12973826#12973826) JeromeLEKIEFFRE 6 лет назад 0

0 ответов на вопрос