Como executar um programa em C como daemon?

2

Eu tenho um programa C que eu quero rodar como um daemon. Eu estou trabalhando no 14.04LTS do Ubuntu. Qual é o caminho certo para fazer isso? Alguém pode ajudar?

    
por Neetha 17.05.2016 / 10:25

2 respostas

2

E agora, a resposta do Ubuntu.

O jeito certo de fazer isso é sob o gerenciador do daemon que vem com o Ubuntu 14. O que outros disseram aqui sobre projetar um programa explicitamente para ser um daemon, e chamar uma função de biblioteca daemon() , é totalmente equivocado. Ironicamente, o Ubuntu teve inicio para três versões LTS anteriores para a versão 14 LTS - desde o Ubuntu 6.10 em 2006. Tem um gerente de daemon, de um tipo ou outro, desde então.

A resposta certa para pessoas com gerenciamento de serviço adequado é que você não chama daemon() e você não toma medidas especiais para "ser um daemon". E para algumas pessoas esta tem sido a resposta certa desde o início dos anos 90. Mesmo 2006 foi um pouco tarde para a festa. ☺ Mesmo assim, definitivamente tem sido a resposta certa nos últimos dez anos quando se trata do Ubuntu.

O que você faz é simples. Você configura um arquivo "job" inicial que informa ao upstart quando e como invocar seu programa. O upstart invoca isso já desmonhecido , sem um terminal de controle e com um estado de processo inicial previsível e invariável. Seu programa não faz nada de especial e simplesmente executa, gravando logs e mensagens de erro no erro padrão da maneira normal. Você organiza no arquivo de trabalho como o upstart lida com o que está escrito no erro padrão.

O Cookbook upstart descreve tudo isso em detalhes, incluindo as várias sub-rotinas que controlam eventos de inicialização e tratamento de log. E há muito sobre o assunto aqui e no AskUbuntu.

Esteja preparado para o fato de que o mundo vai mudar em você de forma bastante significativa se você atualizar posteriormente para o Ubuntu 16 LTS. Mas, mesmo assim, não fazer nada especial no código e simplesmente rodar sob um gerenciador de daemon continuará a ser a resposta certa.

Leitura adicional

por 17.05.2016 / 20:20
0

Se a sua questão é executar o programa fora de um terminal, aqui estão algumas maneiras (seu programa não deve pedir nenhuma entrada do usuário):

  • Usando nohup : nohup program > program.log 2>program.err & . Então você pode sair do terminal.

  • Usando atd service: echo "program > program.log 2>program.err" | at now
    ou echo "program > program.log 2>program.err" | batch .

  • como um serviço por um script de inicialização.

Se o seu programa está pedindo a entrada do usuário, então não será possível executá-lo fora de um terminal. O melhor é usar uma sessão screen ou tux para desanexar o terminal.

    
por 17.05.2016 / 11:16

Tags