Запустите приложение Qt при запуске как демон Linux

Я разработал приложение Qt, которое содержит TCP-сервер и тому подобное. Теперь я пытаюсь сделать пакеты Ubuntu и позволить приложению автоматически запускаться при запуске.

приложение должно быть запущено, даже если никто не вошел в систему, что означает, что демон запускается через скрипт в /etc / init.d/

Я попытался просто запустить приложение при запуске и отправить сигнал на остановку в init.д сценарий, но это означает, что приложение работает на переднем плане и блокирует init-скрипт.

раздвоение, как в другом вопросе почти работает, я получаю "неизвестную ошибку" после попытки запустить TCP-сервер. Тем не менее, должен быть простой способ написать init-скрипт, который запускает мое приложение в фоновом режиме при запуске в различных дистрибутивах Linux.

может ли кто-нибудь указать мне в правильном направлении?

использование Ubuntu 9.10 с Qt 4.5

5 ответов


является ли ваша программа приложением GUI или она работает без GUI?

Почему бы вам просто не фон его в сценарии init с помощью &?


лучший способ, вероятно, использовать QtService где работа раздвоения позаботится о вас.

однако, если вы хотите продолжать создавать свои собственные, вы должны либо фон приложения или запустить его через старт-стоп-демона что происходит с файле OpenRC или аналогичная утилита для вашего дистрибутива.

кроме того, убедитесь, что вы ссылаетесь только на общую библиотеку 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 также вводятся, хотя и фильтруются из приведенного выше вывода.


вам нужно добавить символическую ссылку в любой ЖК?.D каталоги в /etc в зависимости от уровня выполнения по умолчанию. Или используйте update-rc.D скрипт: сначала вам нужно создать скрипт в /etc / init.d, который выполняет приложение; во-вторых, используйте update-rc.D скрипт для добавления необходимых файлов для запуска.

вы можете найти информацию о том, как это сделать, прочитав update-rc.д руководство по эксплуатации страницы:

$man update-rc.d

Я думаю, что самый простой способ-не иметь никакой логики демонизации в самом приложении, вместо этого используйте вспомогательную программу для запуска приложения в фоновом режиме и управления pid для него.

например, startproc.


вы можете взглянуть на многие скрипты уже в свой /etc/init.d для вдохновения. Из того, что я вижу там, большинство стандартных демонов linux зависят от startproc для начала, и killproc для остановки.