Pregunta

Desarrollé una aplicación Qt que contiene un servidor TCP y demás.Ahora estoy intentando crear paquetes de Ubuntu y dejar que la aplicación se inicie automáticamente al inicio.

La aplicación debe estar ejecutándose incluso si nadie ha iniciado sesión, lo que significa que un demonio se inició mediante un script en /etc/init.d/

Intenté simplemente ejecutar la aplicación al inicio y enviar una señal de interrupción al detenerla en el script init.d, pero eso significa que la aplicación se ejecuta en primer plano y bloquea el script de inicio.

Bifurcando como en otra pregunta casi parece funcionar, aparece un "error desconocido" después de intentar iniciar un servidor TCP.Sin embargo, debería haber una manera fácil de escribir un script de inicio que ejecute mi aplicación en segundo plano al iniciar las distintas distribuciones de Linux.

¿Alguien podría indicarme la dirección correcta?

Usando Ubuntu 9.10 con Qt 4.5

¿Fue útil?

Solución

¿Está su programa de una aplicación GUI o Funciona sin interfaz gráfica de usuario?

¿Por qué no acaba de fondo dentro del script de inicio utilizando &?

Otros consejos

La mejor manera es probablemente usar QtService donde el trabajo de bifurcación se toma el cuidado de usted.

Sin embargo, si desea continuar con la construcción de su cuenta, usted debe tampoco fondo la aplicación o bien puede hacerlo a través de start-stop-daemon que viene con OpenRC o una utilidad similar para su distribución.

Además, asegúrese de que sólo se vincula a la biblioteca compartida QtCore. Aunque la aplicación podría ser la línea de comandos y nunca tire hacia arriba de la interfaz gráfica de usuario, eso no significa que no se requiere que X a fin de que la aplicación se ejecute. Por ejemplo, un conjunto de pruebas de unidad:

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

Debido QtGui está presente, todas las bibliotecas X son también traídos, aunque filtrada de la salida anterior.

Es necesario añadir un enlace simbólico en cualquiera de los rc? .D directorios bajo / etc, dependiendo del nivel de ejecución predeterminado. O utiliza el script update-rc.d: primero es necesario crear un script en /etc/init.d que ejecuta la aplicación; En segundo lugar, utilizar el script update-rc.d para agregar los archivos necesarios para iniciar.

Puede encontrar información sobre cómo hacerlo mediante la lectura de update-rc.d página del manual:

$man update-rc.d

Creo que la forma más simple es no tener ninguna lógica daemonize en su propia aplicación, en lugar de utilizar un programa de ayuda a iniciar la aplicación en segundo plano y gestionar un PID para ello.

Por ejemplo, startproc .

Puede echar un vistazo a los ya muchos guiones en su /etc/init.d en busca de inspiración. Por lo que veo allí, la mayoría de los demonios de Linux estándar dependen de startproc para el arranque, y killproc para detenerse.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top