Existem algumas opções em que posso pensar, a sua eficácia depende de como as coisas chegam ao "console".
Para mensagens baseadas no kernel, o mais simples é usar dmesg -n 1
para desabilitar (praticamente todas) as mensagens do console, e usar o syslogd / klogd para extrair e registrá-las ou encaminhá-las. Todas as mensagens do kernel ainda são registradas e podem ser acessadas via /proc/kmsg
(ou sys_syslog()
), independentemente do nível de log do console. Uma variação disso é inicializar seu kernel com quiet
, o que suprime printk()
output e depende apenas do syslogd / klogd para processar mensagens do kernel.
Uma opção mais aventureira e abrangente é usar um módulo de console , que é mais comumente usado em convidados da VM, para que o host da VM possa acessar os consoles convidados diretamente. Existem dois tipos , o driver do sistema (por exemplo, "VGA" em um PC x86, o kernel "console=" opção); e o driver modular que pode ser carregado e descarregado conforme necessário, e pode assumir o controle do sistema. Um driver possivelmente útil é netconsole , embora seja facilmente carregado e não carregado (pode ser usado como um sistema e um driver modular, existem duas desvantagens:
- não
take_over_console()
, então tudo ainda vai para o console original - ele só faz o log via ethernet (o loopback não é suportado)
Você pode fazer algo útil com o console "fictício" e uma das opções acima. netcat
ou socat
são bons "clientes" para um netconsole:
modprobe netconsole "[email protected]/eth0,[email protected]/ff:ff:ff:ff:ff:ff"
socat UDP4-LISTEN:55514 -
Se você está mais interessado em capturar a saída do console de serviços individuais do sistema, não acho que haja uma maneira simples sem modificações de script.
Formas não-simples (e possivelmente não agradáveis) de fazer isso incluem o uso de LD_PRELOAD para funções de redirecionamento hijack que geram saída ou para adicionar algum código _init
para alterar os descritores de arquivo padrão. Ou pior: anexar com um depurador e manipular os descritores de arquivos abertos . /etc/ld.so.preload
seria uma maneira simples (se for hackea e um pouco desagradável) de implementar a primeira opção.
Se eu quisesse monitorar a saída do console para daemons, provavelmente alteraria os scripts de inicialização para executá-los em screen
sessions, talvez assim como .