我已经开发了一个Qt应用程序,它包含一个TCP服务器等等。我现在正在尝试制作Ubuntu包,让应用程序在启动时自动启动。
即使没有人登录,应用程序也需要运行,这意味着守护进程是通过/etc/init.d/中的脚本启动的
我尝试在启动时运行应用程序,并在init.d脚本中发送终止信号,但这意味着应用程序在前台运行并阻塞init-script。
Forking like in an other question似乎几乎正常工作,我得到‘未知错误’后,试图启动一个TCP服务器。不过,应该有一种简单的方法来编写init脚本,以便在各种Linux发行版上启动时在后台运行我的应用程序。
有谁能给我指个方向吗?
在Qt 4.5中使用Ubuntu 9.10
发布于 2009-07-05 14:26:46
你的程序是GUI应用程序还是没有GUI就能工作?
为什么不在init脚本中使用&对其进行后台处理?
发布于 2009-08-18 00:32:38
最好的方法可能是使用QtService,它会为您处理forking的工作。
但是,如果您希望继续构建自己的应用程序,则应该在后台运行应用程序,或者通过OpenRC附带的start-stop-daemon或适用于您的发行版的类似实用程序运行它。
此外,请确保您只链接到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库,尽管从上面的输出中过滤了X库。
发布于 2009-07-05 14:49:39
根据默认运行级别,您需要将符号链接添加到/etc下的任何rc?.d目录中。或者使用update-rc.d脚本:首先,需要在/etc/init.d中创建执行应用程序的脚本;其次,使用update-rc.d脚本添加启动所需的文件。
您可以通过阅读update-rc.d手册页找到有关如何执行此操作的信息:
$man update-rc.dhttps://stackoverflow.com/questions/1084140
复制相似问题