首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用systemd启动Qt应用

使用systemd启动Qt应用
EN

Stack Overflow用户
提问于 2015-07-13 14:58:38
回答 2查看 3.4K关注 0票数 1

我想在启动时在我的面板上启动一个'Qt‘应用。它使用systemd启动进程,图形后端是wayland。因为它使用的是systemd,所以我写了一个简单的服务来启动我的应用程序。PSB。

代码语言:javascript
复制
[Unit] 
Description=Qt App 
After=multi-user.target


[Service] 
Type=simple 
WorkingDirectory=/home/root 
ExecStart=/etc/init.d/qtapp start

[Install] 
WantedBy=multi-user.target

这个'/etc/init.d/qtapp‘脚本只是获取'profile',设置XDG_*环境并启动我的Qt应用程序。但在这种设置下,我的应用程序根本不能正常运行。但是当我检查正在运行的进程列表时,它也列出了我的应用程序。所以,它正在运行,但我在屏幕上什么也看不到。

如果我在面板打开后手动启动应用程序,它运行得很好。我不确定为什么它不能从systemd启动。

有人遇到过这个问题吗?有什么建议我可以试着让它工作吗?

EN

回答 2

Stack Overflow用户

发布于 2015-07-13 20:22:05

我在工作中也遇到了同样的问题。我需要7/24运行我的应用程序,当它崩溃或用户手动退出时,应用程序应该自动重新运行。为此,我在/etc/init.d/xxx中创建了用于启动的文件。然而,我并没有在这里运行我的应用程序。它只是启动了另一个bash脚本,该脚本检查正在运行的进程,并使用"grep“检查我的应用程序是否正在运行。如果它没有运行,它会再次运行。为什么我要这样使用;

  • I add all libraries,Qt,Opencv,and my other libs
  • add命令会更简单,比如显示需要使用的配置文件以及应该使用的调试级别
  • 存储来自控制台输出的日志文件,如(2>&1等)

编辑:

因此,您可以创建upstart脚本,该脚本用于启动其他应用程序的bash脚本。例如;

启动脚本:

代码语言:javascript
复制
start on runlevel [2345]
stop on runlevel [016]

sleep 120

script
    exec /.1/MyApp/myApp.sh
end script

下面是myApp.sh:

代码语言:javascript
复制
    #!/bin/bash

    export QTDIR=/.1/MyApp/lib:/usr/local/Trolltech-4.8.2/
    export LD_LIBRARY_PATH=/.1/MyApp/lib:/usr/local/Trolltech-4.8.2/lib

    while true;do

    ps cax | grep myApp > /dev/null
    if [ $? -eq 0 ]; then
        echo "Application running " >> /.1/MyApp/bin/log/testUp.log
        sleep 10
    else
        echo "Application started " >> /.1/MyApp/bin/log/testUp.log
        cd /.1/MyApp/bin/
        /.1/MyApp/bin/myApp -c /.1/MyApp/conf/myApp.cfg -d 5  2>&1  > /.1/MyApp/bin/log/testUp.log

    fi

    done
票数 0
EN

Stack Overflow用户

发布于 2015-07-14 13:18:05

这可能是因为,这里出现了死锁的情况。您已经在服务文件的单元部分中指定了After=multi-user.target,它将在多用户启动后启动您的服务。同时,您希望在服务文件的Install部分中通过提供选项WantedBy=multi-user.target来启动多用户.target

这是在创建依赖的死锁类型。为了避免这种情况,在Install部分使用不同的目标启动您的服务。或者只是从单元部分删除"After=“选项(如果您不想要任何依赖项)

注意:在使用systemctl enable your_service_file.service重新引导系统之前,请务必启用服务文件

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31377148

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档