Question

J'ai développé une application Qt qui contient un serveur TCP et autres.J'essaie maintenant de créer des packages Ubuntu et de laisser l'application démarrer automatiquement au démarrage.

L'application doit être exécutée même si personne n'est connecté, ce qui signifie qu'un démon est démarré via un script dans /etc/init.d/

J'ai essayé simplement d'exécuter l'application au démarrage et d'envoyer un signal d'arrêt à l'arrêt dans le script init.d, mais cela signifie que l'application s'exécute au premier plan et bloque le script d'initialisation.

Fourcher comme dans une autre question semble presque fonctionner, j'obtiens une « erreur inconnue » après avoir essayé de démarrer un serveur TCP.Néanmoins, il devrait exister un moyen simple d'écrire un script d'initialisation qui exécute mon application en arrière-plan au démarrage sur les différentes distributions Linux.

Quelqu'un pourrait-il m'indiquer la bonne direction ?

Utiliser Ubuntu 9.10 avec Qt 4.5

Était-ce utile?

La solution

Votre programme est-il une application GUI ou fonctionne-t-il sans GUI ?

Pourquoi ne le faites-vous pas simplement en arrière-plan dans le script d'initialisation en utilisant & ?

Autres conseils

La meilleure façon est probablement d'utiliser QtService où le travail de bifurcation est pris en charge pour vous.

Cependant, si vous souhaitez continuer à créer la vôtre, vous devez soit installer l'application en arrière-plan, soit l'exécuter via démon start-stop qui vient avec OuvertRC ou un utilitaire similaire pour votre distribution.

Assurez-vous également de créer un lien uniquement vers la bibliothèque partagée QtCore.Bien que l'application puisse être en ligne de commande et ne jamais afficher l'interface graphique, cela ne signifie pas que X n'est pas requis pour que l'application s'exécute.Par exemple, un ensemble de tests unitaires :

$ 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)

Parce que QtGui est présent, toutes les bibliothèques X sont également importées, bien que filtrées à partir de la sortie ci-dessus.

Vous devez ajouter un lien symbolique dans l'un des répertoires rc?.d sous /etc en fonction du niveau d'exécution par défaut.Ou utilisez le script update-rc.d :vous devez d'abord créer un script dans /etc/init.d qui exécute l'application ;Deuxièmement, utilisez le script update-rc.d pour ajouter les fichiers nécessaires au démarrage.

Vous pouvez trouver des informations sur la façon de procéder en lisant la page de manuel update-rc.d :

$man update-rc.d

Je pense que le moyen le plus simple est de ne pas avoir de logique démoniaque dans votre application elle-même, mais d'utiliser plutôt un programme d'assistance pour démarrer l'application en arrière-plan et gérer un pid pour celle-ci.

Par exemple, démarrerproc.

Vous pouvez jeter un œil aux nombreux scripts déjà présents dans votre /etc/init.d pour l'inspiration.D'après ce que je vois là-bas, la plupart des démons Linux standard dépendent de startproc pour commencer, et killproc pour arrêter.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top