Frage

Ich habe entwickelt, die eine Qt-Anwendung, die enthält ein TCP-server und so.Ich bin jetzt versuchen, stellen Sie die Ubuntu-Pakete und lassen Sie das Programm automatisch starten, auf Start.

Die Anwendung muss ausgeführt werden, auch wenn niemand angemeldet ist, was bedeutet, dass ein daemon gestartet, die über ein Skript in /etc/init.d/

Ich habe versucht, einfach die Anwendung ausgeführt wird auf start, und sendet ein kill-signal auf halt in der init.d-Skript, aber das bedeutet, dass die Anwendung im Vordergrund ausgeführt wird, und blockiert das init-Skript.

Verzweigung wie in einer anderen Frage fast scheint zu funktionieren, bekomme ich die Meldung 'unbekannter Fehler', nach dem Versuch zu starten, ein TCP-server.Dennoch, es sollte eine einfache Möglichkeit zum schreiben eines init-Skript, das ausgeführt wird meine Anwendung im hintergrund auf Start, auf den verschiedenen Linux-Distributionen.

Könnte jemand mich in die richtige Richtung?

Mit Ubuntu 9.10 mit Qt 4.5

War es hilfreich?

Lösung

Ist Ihr Programm eine GUI-Anwendung oder funktioniert es ohne GUI?

Warum nicht Sie hintergrund in der init-Skript mit &?

Andere Tipps

Der beste Weg ist wahrscheinlich die Verwendung QtService wo die Arbeit der Gabelung ist gesorgt für Sie.

Jedoch, wenn Sie wollen weiterhin Ihre eigenen zu bauen, sollten Sie entweder den hintergrund der Anwendung oder starten Sie es über start-stop-daemon kommt mit OpenRC oder ein ähnliches Dienstprogramm für Ihren Vertrieb.

Auch, stellen Sie sicher, dass Sie nur einen link zu den QtCore shared library.Obwohl die Anwendung möglicherweise Befehl Linie und ziehen Sie niemals die GUI, das bedeutet nicht, dass X nicht erforderlich für die Ausführung der Anwendung.Für Beispiel, eine Reihe von unit-tests:

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

Weil QtGui vorhanden ist, alle die X-Bibliotheken sind auch in brachte, obwohl gefiltert aus der Ausgabe oben.

Müssen Sie einen symbolischen link in den rc?.d Verzeichnisse unter /etc abhängig von der Standard-runlevel.Oder verwenden Sie die update-rc.d-Skript:zuerst müssen Sie erstellen Sie ein Skript in /etc/init.d, führt die Anwendung;zweiten, verwenden Sie die update-rc.d-Skript hinzufügen, um die benötigten Dateien zu starten.

Sie können finden Informationen, wie zu tun es durch Lesen der update-rc.d manual page:

$man update-rc.d

Ich denke, der einfachste Weg ist, um keine daemonize Logik in Ihrer Anwendung selbst, sondern verwenden Sie ein Hilfsprogramm zum starten der app im hintergrund und verwalten eine pid für es.

Für Beispiel, startproc.

Sie können einen Blick auf die zahlreichen Schriften bereits in Ihrem /etc/init.d für inspiration.Von dem, was ich dort sehen, den meisten standard-linux-daemons, die davon abhängen, startproc für start und killproc für das stoppen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top