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

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

Eu executo o Debian 8 Jessie.

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

Parece que >/root/log 2>&1é ineficaz. Suponho que isso faça sentido, já que start-stop-daemon(8)não é uma concha. De qualquer forma, como devo redirecionar o stdout e o stderr do daemon?

[Acontece que o daemon é exim4(8), mas isso não é relevante para minha pergunta, até onde eu sei. O LSB evidentemente delega o gerenciamento do daemon ao Systemd; isso pode ser indiretamente relevante, pelo que sei.]

Responder1

Tentar passar opções mágicas pelas várias camadas de script de shell é a maneira totalmente errada de fazer isso em um sistema operacional Linux systemd.

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

Não há nenhuma delegação acontecendo. Em primeiro lugar, seus rcscripts não são responsáveis ​​pelo serviço. Eles estão simplesmente sendo executados como proxies úteis para isso.

Então, o que você precisa fazer é observar a saída de log já capturada para o exim4.serviceserviço. Isso estará no diário ou em qualquer syslogvariante que você tenha organizado para alimentar o diário.

Para este último faça o que for apropriado para a sua syslogvariante. Para o primeiro, observe que systemctlmostra os lançamentos recentes do serviço sempre que você executa

status do systemctl exim4.service
com privilégios apropriados (superusuário ou membro do systemd-journalgrupo). Você também pode visualizar os lançamentos contábeis manuais do serviço desde a última inicialização (que o diário ainda não foi desativado) com

jornalctl -u exim4.service -e -b

exim sob gerenciamento de serviço adequado

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

Observe também que é uma falsidade que exim confunda "primeiro plano" e "depuração"/"detalhado". Sua -bdfopção é explicitamente a versão não "daemonizante" do -bd, embora para invocá-lo como um daemon "ativado por soquete" por conexão (conforme os exemplos na leitura adicional), onde as ferramentas de gerenciamento de serviço lidam com o soquete de escuta, seria usar -bsem vez de -bdfqualquer maneira.

Leitura adicional

informação relacionada