Tenho um pequeno serviço escrito em C no Debian.
Este serviço inicia automaticamente com o Linux e faz algumas operações de arquivo e outras coisas conforme o esperado.
O serviço imprime algumas mensagens informativas e também situações de erro na saída padrão. Isso é visível em uma janela de console quando executo o binário do console, não como um serviço.
A única coisa que não consegui fazer até agora foi escrever a saída no diário, quando o binário é executado como um serviço.
Eu passei por todos os resultados de pesquisa que encontrei, estou consultando o diário como root e vejo mensagens do sistema iniciando/parando o serviço, mas nada que o binário do serviço imprima.
Eu simplesmente imprimo com printf("hey this should appear in the journal");
- mas não há nada para ver no diário.
De acordo com o que é explicado em todos os lugares, toda saída de um serviço deve ser automaticamente direcionada para o journal, certo?
O que eu poderia estar esquecendo para que isso não aconteça?
Editar
Eu encontrei funções especiais para chamar para registro, mas na verdade eu gosto da ideia de obter saída padrão automaticamente no console ou no diário, dependendo de como eu executo o binário.
Eu tentei um serviço de script bash e descobri que ele grava echo
mensagens no diário como esperado.
StandardOutput=
Quando executado usando systemd, a saída padrão de uma unidade vai para o que a configuração da unidade especificar. Isso assume oDefaultStandardOutput=
valor da configuração do sistema por padrão, e esse valor por padrão éjournal
. Então, se seu sistema usa configurações padrão, a saída padrão das unidades deve ir para o diário.Para qualquer unidade, você pode verificar essa configuração executando
(substituindo
yourunit
conforme apropriado).Uma coisa a verificar é se o seu programa está liberando sua saída: com
printf
, você precisa incluir uma nova linha (\n
) ou chamar explicitamentefflush
.Como regra geral, as mensagens de log devem ser escritas usando
syslog
, não enviadas para a saída padrão; veja Maneira correta de escrever código C que injeta mensagem em /var/log/messages? para mais detalhes.