如何暂停(或捕获)启动序列结束时飞过的消息?

如何暂停(或捕获)启动序列结束时飞过的消息?

在“启动序列” 1即将结束时,我看到一系列较长的诊断消息很快飞过,就在我看到登录提示2之前。

AFAICT,组成此短暂输出的大多数(如果不是全部)行都以下面显示的任一字符串开头

[  OK  ]
[FAILED]

...其中OK为绿色,FAILED为红色3

这些消息闪现的时间太短,我无法阅读。

我的问题是:

有没有办法让这些消息更容易阅读?


我想到的可能的解决方案包括(按优先顺序排列):

  1. 发送(或简单地重定向)这些消息逐字4一些持久性日志文件;
  2. 启用分页式机制(Press any key to continue...);
  3. 在打印这些消息后插入一个暂停(可配置长度);
  4. 启用某些按键(或按键组合)以暂停到屏幕的输出5

编辑:根据我迄今为止收到的评论,我必须得出结论,这个词逐字上面(1)中的内容要么没有被理解,要么没有被认真对待,尽管我已经尽可能地强调了。如果可以的话我会让它闪烁...


EDIT2:建议评论中给出的内容对我来说似乎很有希望,但我还没有能够让它发挥作用。这就是我所做的:

首先,我在末尾添加了以下内容/etc/rsyslog.conf

# Save boot messages also to boot.log
local7.* /var/log/boot.log

...并重新启动。我看到常见的诊断消息飞过,但没有/var/log/boot.log创建文件。

然后,在(诚然不太可能)事件必须/var/log/boot.log已经存在rsyslog才能写入它时,我执行(作为 root):

touch /var/log/boot.log
chgrp adm /var/log/boot.log
chmod 640 /var/log/boot.log

...其中chgrpchmod命令的目的是使 的所有权和权限与/var/log/boot.log下所有其他日志文件的所有权和权限相匹配/var/log。然后我重新启动,看到消息等。/var/log/boot.log重新启动后文件仍为空。

/var/log/boot.log(当我将的权限更改为 时,我得到了相同的非结果666。)

grep编辑了 的输出journalctl --boot和下面的文件,/var/log以查找我能想到的任何可能与我的问题有关的内容rsyslog,但没有找到任何内容。 (我一点也不熟悉rsyslog,所以我确信我的搜索非常无能。)

很明显,到目前为止我所做的还不足以启用所需的日志记录。我现在正在寻找我所缺少的东西。不过,我还没有找到很多相关文档。例如,既没有rsyslog.conf(5)rsyslogd(8)没有屈尊解释local7是什么(rsyslog.conf(5)至少足够有礼貌地提到一次,而不提供任何进一步的信息)。


编辑3

发行版信息:

$ lsb_release -a
No LSB modules are available.
Distributor ID: Debian
Description:    Debian GNU/Linux 8.3 (jessie)
Release:    8.3
Codename:   jessie
$ uname -a
Linux myhost 3.16.0-4-amd64 #1 SMP Debian 3.16.7-ckt20-1+deb8u3 (2016-01-17) x86_64 GNU/Linux

编辑4

其他可能相关的信息:

$ cat /lib/systemd/system/rsyslog.service
[Unit]
Description=System Logging Service
Requires=syslog.socket
Documentation=man:rsyslogd(8)
Documentation=http://www.rsyslog.com/doc/

[Service]
Type=notify
ExecStart=/usr/sbin/rsyslogd -n
StandardOutput=null
Restart=on-failure

[Install]
WantedBy=multi-user.target
Alias=syslog.service
$ cat /proc/$(pgrep rsyslogd)/limits
Limit                     Soft Limit           Hard Limit           Units     
Max cpu time              unlimited            unlimited            seconds   
Max file size             unlimited            unlimited            bytes     
Max data size             unlimited            unlimited            bytes     
Max stack size            8388608              unlimited            bytes     
Max core file size        0                    unlimited            bytes     
Max resident set          unlimited            unlimited            bytes     
Max processes             128529               128529               processes 
Max open files            1024                 4096                 files     
Max locked memory         65536                65536                bytes     
Max address space         unlimited            unlimited            bytes     
Max file locks            unlimited            unlimited            locks     
Max pending signals       128529               128529               signals   
Max msgqueue size         819200               819200               bytes     
Max nice priority         0                    0                    
Max realtime priority     0                    0                    
Max realtime timeout      unlimited            unlimited            us        

$ sudo ls /proc/$(pgrep rsyslogd)/fd | wc -l
10

1即当我(重新)启动我的机器时发生的情况。

2 FWIW,multi-user.target是我的默认值。

3其余文本均为黑底白字。随后的登录提示也是如此。

4我发现完全不能接受任何不允许我看到这些消息在启动序列期间出现的确切文本的解决方案。由于我总是不太熟悉这些诊断消息所指的内容,因此我不可能识别原始消息传达的基础信息可能被解释、传播到多个其他消息的所有方式,包含在其他消息等中(仅通过在线搜索准确的措辞原始消息的内容我是否有希望找到问题的解决方案。)到目前为止我所尝试的一切,包括journalctl -b并未dmesg能给我原始消息逐字。例如,当我运行启动时,我只能看到一个红色FAILED,但journalctl --boot | grep FAILED | wc -l返回0,并journalctl --boot | grep -i FAILED | wc -l 返回1086。这些都不是我要找的。

5在我的系统中,我按下此类键或组合键的时间不到一秒钟,并且不会预先警告此短暂间隔何时开始。除非能够配置必须发生此类按键的时间间隔的持续时间,否则任何基于按键的解决方案都太不切实际,只能作为最后的手段。另外,FWIW,我确实尝试在消息闪烁时按 或键,但两者都没有任何区别。Scroll
Lock
Pause/
Break

答案1

您可以设置一个内核命令行参数(类似于console=tty0 console=ttyS0,115200n8)来将它们发送到串行控制台,然后侦听串行端口的设备可以简单地记录它,因为那时它只是一个文本流。

如果 systemd 不记录这些东西,那就太愚蠢了。 Openrc 在 /var/log/rc.log 中执行此操作。另外,如果它不是 systemd,您可能可以修改 inittab 以不在 tty1 上放置 getty/Xorg,并防止任何内容(如 Xorg)在其他地方切换,并且旧文本可能会保留在原处(就像在旧文本上所做的那样) openSUSE 之前的 systemd)。或者将其复制到另一个 tty(我认为是 syslog 执行此操作而不是 inittab...并且您可能会看到许多 linux 安装程序在 tty9+ 上执行此操作)如果它切换回来,它就不会向后滚动(shift+pgup) ),但可能会有一页输出。也许对 systemd 了解更多的人知道 inittab 的新等效项,您可以更改它。

相关内容