Como redirecionar a stdout e stderr de um daemon usando o daemon start-stop (8)?

3

Eu corro Debian 8 jessie.

Eu ativei o recurso de depuração de um daemon, que faz com que o daemon imprima informações de depuração para stdout e / ou stderr. Como posso persuadir start-stop-daemon(8) , como invocado por /lib/lsb/init-functions , a redirecionar a stdout e stderr do daemon para o meu arquivo de log de depuração /root/log ?

Parece que >/root/log 2>&1 é ineficaz. Eu suponho que isso faz sentido, já que start-stop-daemon(8) não é um shell. De qualquer forma, como devo redirecionar a stdout e stderr do daemon?

[O daemon é exim4(8) , mas isso não é relevante para a minha pergunta, tanto quanto eu sei. O LSB evidentemente delega o gerenciamento do daemon para o Systemd; isso pode ser indiretamente relevante para tudo que eu sei.]

    
por thb 01.10.2016 / 23:10

1 resposta

2

Tentar passar opções mágicas através das várias camadas de script de shell é totalmente o caminho errado para fazer isso em um sistema operacional Linux systemd.

systemd registra as saídas / erros padrão de serviços que são gerados automaticamente pelo gerador de serviços "sysv", como este é. O gerador de serviços "sysv" fez um exim4.service (em algum lugar abaixo de /run/systemd ) que chama seu /etc/init.d/exim4 como o serviço.

Não há delegação acontecendo. Seus scripts de rc não são responsáveis pelo serviço em primeiro lugar. Eles estão simplesmente sendo executados como proxies úteis para isso.

Então, o que você precisa fazer é olhar para a saída de log já capturada para o serviço exim4.service . Isso será no diário ou em qualquer syslog variante que você tenha organizado para alimentar o diário.

Para o último, faça o que for apropriado para sua variante syslog . Para o primeiro, observe que systemctl mostra as entradas de diário recentes para o serviço sempre que você executa

systemctl status exim4.service
com privilégios apropriados (superusuário ou associação do grupo systemd-journal ). Você também pode visualizar as entradas de diário para o serviço desde a última auto-inicialização (que o diário ainda não foi girado) com
journalctl -u exim4.service -e -b

exim sob gerenciamento de serviço adequado

Ironicamente, toda essa monstruosidade de script rc pode ser substituída por algumas unidades de serviço e de soquete exim4-queue.service , [email protected] + exim4-smtp-relay.socket e [email protected] + exim4-smtp-submission.socket .

Note também que é uma falsidade que exim combina "primeiro plano" e "debug" / "verbose". Sua opção -bdf é explicitamente a versão não "daemonização" de -bd , embora invocá-la como um daemon "ativado por soquete" por conexão (conforme os exemplos na leitura adicional) onde as ferramentas de gerenciamento de serviço tratam o soquete de escuta, um usaria -bs em vez de -bdf de qualquer maneira.

Leitura adicional

por 02.10.2016 / 08:34