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.
sistemajáregistra 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/exim4
como serviço.
Não há nenhuma delegação acontecendo. Em primeiro lugar, seus rc
scripts 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.service
serviço. Isso estará no diário ou em qualquer syslog
variante que você tenha organizado para alimentar o diário.
Para este último faça o que for apropriado para a sua syslog
variante. Para o primeiro, observe que systemctl
mostra os lançamentos recentes do serviço sempre que você executa
status do systemctl exim4.servicecom privilégios apropriados (superusuário ou membro do
systemd-journal
grupo). 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) comjornalctl -u exim4.service -e -b
exim sob gerenciamento de serviço adequado
Ironicamente, toda essa rc
monstruosidade de script pode ser substituída por algumas unidades de serviço e soquete bastante curtas exim4-queue.service
, [email protected]
+ exim4-smtp-relay.socket
e [email protected]
+ .exim4-smtp-submission.socket
Observe também que é uma falsidade que exim confunda "primeiro plano" e "depuração"/"detalhado". Sua -bdf
opçã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 -bs
em vez de -bdf
qualquer maneira.
Leitura adicional
- https://unix.stackexchange.com/a/233581/5132
- Jonathan de Boyne Pollard (2014).Uma análise lado a lado de scripts de execução e unidades de serviço.. Respostas dadas com frequência.
- Jonathan de Boyne Pollard (2014). "Não presuma que "primeiro plano" significa "modo de depuração".'. Erros a evitar ao projetar programas daemon Unix. Respostas dadas com frequência.