启动应用程序的 Systemd 问题

启动应用程序的 Systemd 问题

我在我的应用程序中使用 Toradex VF50 板。它具有 VF-50 Colibri ARM 处理器。我已经在上面移植了一个 Linux BSP,并且我正在使用 systemd 来启动我的 Qt 应用程序。在我的 Qt 应用程序中,我正在解析一些文本文件以获取默认初始化值。

当我使用 systemd (multi-user.target) 启动应用程序时,我的应用程序崩溃了,因为应用程序无法从文件中读取值。

但是,当我从终端运行相同的应用程序时,它运行良好,没有任何问题。

我用于我的应用程序的服务文件:

[Unit]
Description=Test Application
After=dropbear.service

[Service]
ExecStart=/home/root/startup.sh
#Restart=on-failure
#RestartSec=5

[Install]
WantedBy=multi-user.target

startup.sh有命令:

/bin/sh -c 'source /etc/environment ; /home/root/TestApp -qws'

答案1

systemd运行脚本时,它将仅提供非常有限的环境。特别是它不会设置HOME也不USER会将目录更改为/home/root.也许您的 TestApp 依赖于其中之一。尝试在您的 中明确设置它们startup.sh,包括cd正确的目录。我的 systemd 版本刚刚设置:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
LANG=en_US.UTF-8

和当前目录到/.您还可以在该[Service]部分中提供环境变量,例如:

Environment=HOME=/home/root USER=root

但请注意,shell 变量不会扩展,因此您不能使用它来设置路径,例如使用PATH=/opt/bin:$PATH.

相关内容