![登录到 /dev/xconsole 无法正常工作](https://linux22.com/image/72883/%E7%99%BB%E5%BD%95%E5%88%B0%20%2Fdev%2Fxconsole%20%E6%97%A0%E6%B3%95%E6%AD%A3%E5%B8%B8%E5%B7%A5%E4%BD%9C.png)
我正在使用rsyslog
,并且我想将日志发送到/dev/xconsole
.
我有以下相关行/etc/rsyslog.conf
*.*;cron.!=info;mail.!=info |/dev/xconsole
这仅部分有效。看起来好像/dev/xconsole
只能存储cca 64kB。一旦缓冲区满了,新的日志就会丢失
我做了以下测试:
1) add to `/etc/rsyslog.conf`
*.*;cron.!=info;mail.!=info /tmp/aaa
2) reboot
3) cat /dev/xconsole > /tmp/bbb
4) diff /tmp/aaa /tmp/bbb
现在,aaa 和 bbb 应该是相同的。但他们不是。 aaa 包含完整日志,而 bbb 缺少最后 229 行
我该如何解决这个问题?尺寸/dev/xconsole
确实有限吗?我可以增加尺寸吗?
答案1
从技术上来说,/dev/xconsole
没有尺寸因为它是一个命名管道又名先进先出。但 Linux 内核在使用时为每个此类对象提供一个缓冲区,64 KiB(在 Linux 3.x 中)或 4 KiB(在 Linux 2.x 中)。不在文件系统中,仅在内存中。看https://stackoverflow.com/questions/4624071/pipe-buffer-size-is-4k-or-64k和https://unix.stackexchange.com/a/229544/80483了解更多信息。
如果应用程序(xconsole)没有及时读取其数据,那么缓冲区就会变满; syslog 无法在那里写入,并且为了避免被阻止,会丢弃消息。