使用systemd启动Qt应用程序

时间:2015-07-13 06:58:38

标签: qt startup systemd wayland qtwayland

我想推出一个' Qt'在启动期间我的主板上的app。它使用systemd启动进程,图形后端是一个方法。由于它使用的是systemd,我写了一个简单的服务来启动我的应用程序。 PSB。

viewDidLayoutSubviews

' /etc/init.d/qtapp'脚本只是来源'个人资料',设置XDG_ * envs并启动我的Qt应用程序。但是通过这种设置,我的应用程序根本不会发挥作用。 但是当我检查运行进程列表时,它也列出了我的应用程序。所以,它正在运行,但我在屏幕上什么都没有。

如果我在电路板启动后手动启动应用程序,它运行正常。我不确定它为什么不从systemd启动。

有人遇到过这个问题吗?以及我可以尝试使其有效的任何建议吗?

2 个答案:

答案 0 :(得分:0)

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

  • 我添加了所有库,Qt,Opencv和我的其他库
  • 添加命令会更容易,比如显示它需要使用哪个配置文件以及它应该使用哪个调试级别
  • 从控制台输出存储日志文件,如(2>& 1 etc ..)

修改

因此,您可以创建新手脚本,即启动其他应用的bash脚本。例如;

Upstart脚本:

start on runlevel [2345]
stop on runlevel [016]

sleep 120

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

这是myApp.sh:

    #!/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

答案 1 :(得分:0)

可能是因为这里的僵局情况。您已在服务文件的[Unit]部分中提供After=multi-user.target,这将在multi-user.target启动后启动您的服务,同时您希望在[Install]中使用multi-user.target启动通过提供选项WantedBy=multi-user.target

,提供服务文件的部分

这是创建死锁类型的依赖项。为避免此问题,请在[安装]部分中使用不同的目标启动您的服务。或者只是从[Unit]部分删除“After =”选项(如果你不想要任何依赖)

注意:在使用systemctl enable your_service_file.service

重启系统之前,请先启用服务文件