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

StackOverflow https://stackoverflow.com/questions/1084140

Вопрос

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

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

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

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

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

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

Это было полезно?

Решение

Является ли ваша программа приложением с графическим интерфейсом или она работает без графического интерфейса?

Почему бы вам просто не создать фон для этого в скрипте инициализации с помощью &?

Другие советы

Вероятно, лучший способ - это использовать QtService ( КТСЕРВИС ) где о работе по разветвлению позаботятся за вас.

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

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

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

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

$man update-rc.d

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

Например, начальный процесс.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top