Pergunta

Eu desenvolvi uma aplicação Qt, que contém um servidor TCP e tal. Agora eu estou tentando fazer pacotes do Ubuntu e permitir que o aplicativo inicie automaticamente na inicialização.

O aplicativo precisa ser executado mesmo que ninguém está logado, o que significa um daemon começou através de um script em /etc/init.d /

Eu tentei simplesmente executando o aplicativo no início e enviando um sinal-kill na parada no script init.d mas isso significa que o aplicativo é executado no primeiro plano e bloqueia o init-script.

??bifurcação como em uma outra pergunta quase parece trabalho, eu recebo 'erro desconhecido' depois de tentar iniciar um servidor TCP. No entanto, deve haver uma maneira fácil de escrever uma init-script que executa meu aplicativo em segundo plano na inicialização sobre as várias distribuições Linux.

Poderia alguém me aponte na direção certa?

Usando o Ubuntu 9.10 com Qt 4.5

Foi útil?

Solução

é seu programa de uma aplicação gráfica ou funciona sem GUI?

Por que você não apenas pano de fundo, dentro do script de inicialização usando &?

Outras dicas

A melhor maneira é provavelmente para uso QtService onde o trabalho de bifurcação é cuidado para você.

No entanto, se você quiser continuar a construir o seu próprio, você deve ou fundo a aplicação ou executá-lo através de start-stop-daemon que vem com OpenRC ou um utilitário semelhante para a sua distribuição.

Além disso, certifique-se que você só ligar para o QtCore biblioteca compartilhada. Embora o aplicativo pode ser linha de comando e nunca puxar para cima o GUI, isso não significa que X não é necessária para que o aplicativo seja executado. Por exemplo, um conjunto de testes de unidade:

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

Como QtGui está presente, todas as bibliotecas X são também apresentado em, embora filtrada a partir da saída de cima.

Você precisa adicionar um link simbólico em qualquer um dos rc? .D diretórios sob / etc, dependendo do nível de execução padrão. Ou usar o script update-rc.d: primeiro você precisa criar um script em /etc/init.d que executa a aplicação; segundo, use o script update-rc.d para adicionar os arquivos necessários para iniciar.

Você pode encontrar informações sobre como fazê-lo através da leitura update-rc.d página manual:

$man update-rc.d

Eu acho que a maneira mais simples é não ter qualquer lógica daemonize em seu próprio aplicativo, em vez usar um programa de ajuda para iniciar o aplicativo em segundo plano e gerenciar um pid para ele.

Por exemplo, startproc .

Você pode dar uma olhada nos muitos scripts já em sua /etc/init.d para a inspiração. Pelo que vejo lá, a maioria dos daemons Linux padrão dependem startproc para início e killproc para parar.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top