rsyslog 没有捕获输出?

rsyslog 没有捕获输出?

我可以推 / 来自命令到 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

相关内容