Запустите приложение 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
для остановки.