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

hai*_*img 51 linux centos console syslog

我正在使用 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

Dav*_*fer 40

要在运行时设置值,请使用sysctl. (我想一个人也可以/proc/sys/kernel/printk直接写信,显然你也可以dmesg -n CUR这里描述的那样使用)

展示:

# sysctl kernel.printk
kernel.printk = 2       4       1       7
Run Code Online (Sandbox Code Playgroud)

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

放。这里的分隔符只是空格。也有效。

# sysctl -w kernel.printk="2 4 1 7"
kernel.printk = 2 4 1 7
# sysctl kernel.printk
kernel.printk = 2       4       1       7
Run Code Online (Sandbox Code Playgroud)

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

提醒上面布赖恩给出的严重级别和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            
Run Code Online (Sandbox Code Playgroud)

这太吵了,我只想要关键和向上(没有错误)。未标记的消息应该被视为警告,所以 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            
Run Code Online (Sandbox Code Playgroud)

设置为:3 4 1 3

  • `man klogctl` 也解释了这些级别。 (5认同)

Zor*_*che 31

我建议你改变你的/etc/sysctl.conf. 具体来说,您想调整kernel.printk行。

# Uncomment the following to stop low-level messages on console
kernel.printk = 3 4 1 3
Run Code Online (Sandbox Code Playgroud)

我不确定 centos 的默认设置是什么,但我似乎设置的东西比你需要的更详细。

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


小智 13

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

sudo dmesg -n 1
Run Code Online (Sandbox Code Playgroud)

另见:https : //askubuntu.com/questions/97256/how-do-i-disable-messages-or-logging-from-printing-on-the-console-virtual-termin

  • 这正是我想要的!我只是想在调试生成它们的问题时暂时在一个终端中禁用这些消息。 (2认同)

小智 12

我发现这也很有帮助。在基于 RHEL 的发行版上,您可以cat /proc/sys/kernel/printk查看当前的设置。

在printk 文件中可以找到四个值。这些值中的每一个都定义了处理错误消息的不同规则。第一个值称为控制台日志级别,定义打印到控制台的消息的最低优先级。(请注意,优先级越低,日志级别编号越高。)第二个值为没有附加明确日志级别的消息设置默认日志级别。第三个值为控制台日志级别设置可能的最低日志级别配置。最后一个值设置控制台日志级别的默认值。

不再支持使用 /etc/sysconfig/init 中的 LOGLEVEL 参数来设置控制台日志级别。要在 Red Hat Enterprise Linux 6 中设置控制台日志级别,请将 loglevel=' 作为引导时间参数传递。例如,loglevel=6 将打印所有小于 6(不等于仅小于)的消息。

归功于:


hai*_*img 6

根据 RedHat 的说法,这是执行此操作的“官方”方法:

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