我在我的应用程序中使用 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
.