首页 文章

在启动时运行Qt应用程序作为Linux守护程序

提问于
浏览
6

我开发了一个包含TCP服务器等的Qt应用程序 . 我现在正在尝试制作Ubuntu软件包,让应用程序在启动时自动启动 .

即使没有人登录,应用程序也需要运行,这意味着通过/etc/init.d/中的脚本启动了守护程序

我尝试在启动时运行应用程序,并在init.d脚本中停止发送kill信号,但这意味着应用程序在前台运行并阻止init-script .

Forking like in an other question几乎似乎工作,我在尝试启动TCP服务器后得到'unknown error' . 然而,应该有一种简单的方法来编写一个init-script,它在各种Linux发行版的启动时在后台运行我的应用程序 .

有人能指出我正确的方向吗?

使用Utntu 9.10和Qt 4.5

5 回答

  • 2

    您的程序是GUI应用程序还是没有GUI工作?

    你为什么不在init脚本中使用&?

  • 0

    最好的方法可能是使用QtService,在那里为你分担分叉的工作 .

    但是,如果您想继续构建自己的应用程序,则应该通过_2806109_或类似的实用程序为您的发行版安装应用程序或运行它 .

    此外,请确保您只链接到QtCore共享库 . 尽管应用程序可能是命令行并且永远不会启动GUI,但这并不意味着不需要X来运行应用程序 . 例如,一组单元测试:

    $ ldd runTests  | grep Qt
    libQtTest.so.4 => /usr/lib/qt4/libQtTest.so.4 (0x00007fd424de9000)
    libQtXml.so.4 => /usr/lib/qt4/libQtXml.so.4 (0x00007fd424baa000)
    libQtGui.so.4 => /usr/lib/qt4/libQtGui.so.4 (0x00007fd4240db000)
    libQtCore.so.4 => /usr/lib/qt4/libQtCore.so.4 (0x00007fd422644000)
    

    由于存在QtGui,所有X库也会被引入,尽管从上面的输出中过滤掉了 .

  • 1

    您需要在/ etc下的任何rc?.d目录中添加符号链接,具体取决于默认的运行级别 . 或者使用update-rc.d脚本:首先需要在/etc/init.d中创建一个执行应用程序的脚本;第二,使用update-rc.d脚本添加所需的文件以启动 .

    您可以通过阅读update-rc.d手册页找到有关如何操作的信息:

    $man update-rc.d
    
  • 0

    我认为最简单的方法是在应用程序本身中不使用任何守护程序逻辑,而是使用帮助程序在后台启动应用程序并为其管理pid .

    例如,startproc .

  • 1

    您可以查看 /etc/init.d 中已有的许多脚本以获取灵感 . 从我看到的,大多数标准Linux守护进程依赖于 startproc 作为开始,而 killproc 用于停止 .

相关问题