运行使用 systemd 服务启动其他应用程序的脚本

运行使用 systemd 服务启动其他应用程序的脚本

通过指定开关,我们的 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显示并按预期运行。

该配置有什么问题?还有其他方法可以实现该脚本的自动启动而无需手动登录吗?提前致谢!

相关内容