如何阻止内核消息充斥我的控制台?

如何阻止内核消息充斥我的控制台?

我正在使用 Centos 6,rsyslog 日志记录。控制台充斥着内核消息。

  • Klogd 没有运行(我正在使用 rsyslog)
  • Rsyslog 配置没有将任何内容定向到控制台
  • 甚至尝试完全停止 rsyslog

仍然某物我的控制台充斥着内核日志消息。这是什么?我该如何阻止它?

更新:这些是由内核(硬件、iptables 等)生成的消息,传出的内容/proc/kmsg如下:

Shorewall:pub2loc:DROP:IN=br0 OUT= MAC=xxx SRC=xxx DST=xxx LEN=60 TOS=0x00 PREC=0x00 TTL=128 ID=15731 DF PROTO=TCP SPT=63767 DPT=3493 WINDOW=8192 RES=0x00 SYN URGP=0

答案1

我建议你修改一下/etc/sysctl.conf。具体来说,你要调整内核打印函数线。

# Uncomment the following to stop low-level messages on console
kernel.printk = 3 4 1 3

我不确定 centos 的默认设置是什么,但我似乎可能将设置的内容设置得比你需要的更详细。

另请参阅岸墙日志记录部分。您不必使用 LOG 目标进行日志记录,您可以使用其他工具,或调整日志严重性,并进行微调以控制消息的去向。

答案2

要在运行时设置值,请使用sysctl。(我想也可以直接写入/proc/sys/kernel/printk,显然你也可以使用dmesg -n CUR所述这里

展示:

# sysctl kernel.printk
kernel.printk = 2       4       1       7

顺便说一下,输出中的分隔符是单个制表符。

设置。此处分隔符只是空格。同样有效。

# sysctl -w kernel.printk="2 4 1 7"
kernel.printk = 2 4 1 7
# sysctl kernel.printk
kernel.printk = 2       4       1       7

man sysctl更多信息请参阅“在运行时配置内核参数”。

提醒严重程度以及上面 Brian 给出的 kernel.printk 的四个值:

  • CUR = 当前严重性级别;仅打印比此级别更重要的消息
  • DEF = 分配给没有级别的消息的默认严重性级别
  • MIN = 最低允许 CUR
  • BTDEF = 启动时默认 CUR

在我的 CentOS 上:7 4 1 7

                     CUR  DEF  MIN  BTDEF
0 - emergency        x              x                        
1 - alert            x         x    x
2 - critical         x              x
3 - error            x              x
4 - warning          x    x         x
5 - notice           x              x
6 - informational    V              V
7 - debug            

这太吵了,我只想要关键和启动(没有错误)。未标记的消息应被视为警告,因此 DEF 很好:

                     CUR  DEF  MIN  BTDEF
0 - emergency        x              x                        
1 - alert            x         x    x
2 - critical         x              x
3 - error            V              V
4 - warning               x         
5 - notice                           
6 - informational                   
7 - debug            

设置为:3 4 1 3

答案3

您还可以使用以下命令暂时禁止所有内核记录到控制台:

sudo dmesg -n 1

也可以看看:https://askubuntu.com/questions/97256/how-do-i-disable-messages-or-logging-from-printing-on-the-console-virtual-termin

答案4

这是“官方”的做法,根据 RedHat

要在 Red Hat Enterprise Linux 6 中设置控制台日志级别,请传递 loglevel=<number> 作为启动时参数。

相关内容