eu posso empurrarsaída padrão / stderrdepingarcomando para rsyslog assim:
ping www.superuser.com 2>&1 | logger -p user.info
No meu sistema, a saída "ao vivo" pode ser assistida com um simples arquivo tail -f /var/log/messages
. Ele vai para lá por causa da linha correspondente no meu /etc/rsyslog.config
:
# Log anything (except mail) of level info or higher.
# Don't log private authentication messages!
*.info;mail.none;authpriv.none;cron.none -/var/log/messages
No entanto, a mesma coisa não funciona no meu programa personalizado:
myprogram 2>&1 | logger -p user.info
O binário myprogram não retorna/sai imediatamente após a chamada - ele será executado por algum tempo - e de vez em quando imprime mensagens (usando printf) no console. Ele se comporta dessa maneira se eu não canalizar sua saída para o logger. Corrija-me se eu estiver errado, mas esse comportamento é semelhante aopingarcomando (pelo menos quando o destino for alcançado).
Por que então não estou vendo a saída do meu programa /var/log/messages
? A saída poderia ser armazenada em buffer de alguma forma e simplesmente ainda não está sendo registrada? Poderia ser algo mais sobre a rsyslog.conf
linha de configuração?
Responder1
Acontece que foi a saída do myprogram
buffer. Usando truques mencionadosnesta questãoEu encontrei uma solução rápida:
script -q -c "myprogram" | logger -p user.info