我可以推标准输出 / 标准错误来自平命令到 rsyslog 如下:
ping www.superuser.com 2>&1 | logger -p user.info
在我的系统上,可以使用简单的 来观看“实时”输出tail -f /var/log/messages
。它之所以出现在那里,是因为我的 中有相应的行/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
然而,同样的事情对我的自定义程序不起作用:
myprogram 2>&1 | logger -p user.info
myprogram 二进制文件不会在调用后立即返回/退出 - 它会运行一段时间 - 并且时不时地将消息(使用 printf)打印到控制台。如果我不将其输出通过管道传输到记录器中,它就会这样表现。如果我错了,请纠正我,但这种行为类似于平命令(至少在到达目的地时)。
那么为什么我没有看到 myprogram 的输出/var/log/messages
?输出是否可能以某种方式被缓冲,只是还没有到达记录器?可能是rsyslog.conf
配置行的其他原因?
答案1
原来这是myprogram
缓冲的输出。使用上面提到的技巧在这个问题中我想出了一个快速的解决方案:
script -q -c "myprogram" | logger -p user.info