我正在使用命名管道来捕获系统日志消息。然后我可以通过执行类似的操作轻松查看系统日志
cat /var/log/local3.pipe | grep somefilter
or
grep somefilter /var/log/local3.pipe
这些都很好地将系统日志输出到控制台。但是,如果我想将其捕获到文件中,我什么也得不到,例如
cat /var/log/local3.pipe | grep somefilter >> somefile.log
or
grep somefilter /var/log/local3.pipe >> somefile.log
该文件始终保持为零字节。有谁知道为什么?我正在使用 Red Hat Enterprise Linux 5。谢谢。
附加信息:对于想要重现此内容的任何人,这里是命令的完整列表
su
<enter root password>
mkfifo /var/log/local3.pipe
chmod 644 /var/log/local3.pipe
echo "local3.* |/var/log/local3.pipe" >> /etc/syslog.conf
/etc/init.d/syslog restart
exit
然后使用一个 ssh 会话:
cat /var/log/local3.pipe
并在第二个 ssh 会话中(“测试它”应该显示在第一个 ssh 会话中
logger -p local3.info "Test it"
然后在第一个会话中将其更改为
cat /var/log/local3.pipe >> somefile.log
向本地 3 发送更多日志(消息需要不同)。确认消息进入 somefile.log
logger -p local3.info "Test it 2"
然后在第一个会话中将其更改为
cat /var/log/local3.pipe | grep -i test >> somefile.log
现在确认日志不会进入 somefile.log
请注意,该消息需要与上一条消息不同,否则记录器不会立即发送它。