lsb - log_daemon_msg ecoa as mensagens no console do shell!

0
#!/bin/sh
. /lib/lsb/init-functions
log_daemon_msg "this is a daemon s message"

No console do shell, ele imprime,

this is a daemon s message

Um processo daemon não possui stdout. Então, por que daemon startup scripts escrevem para stdout ? Eles não deveriam usar o arquivo syslog ? Como posso redirecionar os logs de inicialização para um arquivo de log do sistema para que eu possa depurar problemas de tempo de inicialização? Eu estou usando o Ubuntu 14.04.

    
por Madhavan Kumar 27.03.2015 / 14:20

1 resposta

1

A daemon process doesn't have stdout at all.

Não é verdade. Se os daemons de alguém estão sendo gerenciados por uma das daemontools da família de conjuntos de ferramentas ( link ), então o daemon terá herdado um descritor de arquivo de saída padrão aberto, para um pipe que o conecta a um serviço de log. Se alguém estiver usando systemd, então (na configuração padrão) o daemon terá herdado um descritor de arquivo de saída padrão aberto, para um soquete que o conecta ao serviço de diário do systemd.

Em qualquer caso, você está combinando o script init.d , que gerencia o daemon, com o próprio daemon. Com o System V rc e com o systemd, o script init.d simplesmente faz com que o processo de início e parada seja iniciado corretamente. (No caso do System V rc , ele faz isso com helpers como start-stop-daemon . No caso do systemd, ele usa systemctl para enviar comandos sobre o D-Bus RPC para processar o # 1.) Não é o daemon processo em si.

A saída padrão do processo do daemon não é necessariamente uma relação com a saída padrão do script init.d . E é a saída padrão do último que você está endereçando com log_daemon_msg . Esta função shell, e seus parentes, imprimem mensagens amistosas do script de gerenciamento do daemon , mostrando o que o script de gerenciamento está fazendo ao tentar executar comandos de controle do daemon. Eles não estão sendo usados no próprio daemon .

Ironicamente, como o gerenciamento de daemon é feito de maneira diferente com o systemd, todos os comandos log_daemon_msg se tornam irrelevantes, pois qualquer script de gerenciamento que origina /lib/lsb/init-functions acaba desviando todos os comandos de controle para systemctl .

How can I redirect the init logs to a system log file so that I can debug boot time issues?

Você tem uma tarefa. Você decidiu que uma subtarefa dessa tarefa é de alguma forma endereçável com log_daemon_msg e aqui está perguntando como obter log_daemon_msg para fazer algo que não foi projetado para fazer. Concentre-se na sua pergunta real .

O Ubuntu 14.04 usa upstart. Que tem um trabalho de arranque /etc/init/rc.conf que fornece compatibilidade com versões anteriores com o System V rc executando realmente o Sistema V rc sempre que ocorre um evento de nível de execução. Esse trabalho é listado no Cookbook iniciante e, como você pode ver, usa a sub-rotina console output .

Como você pode ver no Cookbook , com upstart - também - daemons (por padrão) herdam um descritor de arquivo de saída padrão aberto que está conectado ao mecanismo de registro por job da upstart. Mais uma vez, a noção de que dæmons "não tem saída padrão" está errada. O trabalho /etc/init/rc.conf usa a opção (não padrão) de conectar a saída padrão ao console. Isso, claro, também redireciona a saída dos vários scripts de gerenciamento de daemon que o System V rc gera, por sua vez.

Portanto, se você quiser registrar a saída de seu trabalho /etc/init/rc.conf e todos os scripts de gerenciamento do System V que ele gera, em outro lugar, modifique essa especificação de trabalho.

Se você deseja depurar problemas de inicialização, então use os mecanismos descritos em o Cookbook iniciante (e também no AskUbuntu Stack Exchange em várias respostas) para depuração de tempo de inicialização.

Leitura adicional

por 27.03.2015 / 22:29