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


8

在“启动序列” 1即将结束时,我看到一连串漫长的诊断消息飞速地飞过,就在我看到登录提示2之前

AFAICT,构成这个短暂输出的大部分(如果不是全部)行都从下面显示的任一字符串开始

[  OK  ]
[FAILED]

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

这些消息闪烁太短,我无法阅读。

我的问题是:

有没有一种方法可以使这些消息更易于阅读?


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

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

编辑:根据我到目前为止的评论,我必须得出结论,即使我已尽我所能地强调,上述(1)中的逐字这个词还是不被理解或未被重视。如果可以的话,我会使其闪烁...


EDIT2:meuh在评论中给出的建议对我来说很有希望,但是我还无法使它生效。这是我所做的:

首先,我在的末尾添加了以下内容/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.log666。)

我想出的所有内容都grep输出到journalctl --boot或其中的文件下/var/log,这可能表示我的问题了rsyslog,但没有找到任何东西。(我对一点都不熟悉rsyslog,所以我确定搜索不力。)

显然,到目前为止,我所做的不足以启用所需的日志记录。我现在正在寻找我所缺少的东西。但是,我找不到太多相关的文档。例如,既不rsyslog.conf(5)也不rsyslogd(8)打算解释什么local7rsyslog.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 -bdmesg失败在给我逐字记录原始消息。例如,当我运行启动时,我只能看到一个红色FAILED,但journalctl --boot | grep FAILED | wc -l返回0,然后journalctl --boot | grep -i FAILED | wc -l 返回1086。这些都不是我要找的东西。

5在我的系统中,我只有不到一秒钟的时间可以按这样的键或组合键,并且也没有警告过这个短暂的间隔何时开始。除非人们能够配置必须进行这种按键操作的间隔时间,否则任何基于按键的解决方案都是不切实际的,只能作为最后一种手段来解决。另外,FWIW,我确实尝试在消息闪烁时按或键,但两者没有任何区别。Scroll
Lock
Pause/
Break


4
journalctl -b(作为root)给你正是这样,即看到这些消息的确切文本,因为他们在启动过程中出现
don_crissti

2
根据您的系统,您可能会在文件中找到消息/var/log/boot.log
meuh 2016年

2
@Theophrastus:我开始明白为什么有这么多Linux用户讨厌systemd,而我自己也要加入他们的行列...我编辑了fn 4来拼出(甚至更多)为什么journalctl --boot | grep -i fail,例如,为什么 不是我在找。
kjo

3
kjo,我在引导过程中看到的消息与记录到的消息之间唯一的区别journal[OK]/ 的存在[FAILED]。这些消息在其他方面是相同的。可以知道,诊断/排除故障单元的正确方法是通过systemctl。我不知道您是否可以通过键盘快捷键来暂停启动过程(他们说CTRL + S / CTRL + Q应该可以,但是至少在i915 / KMS上不起作用)。不过,您可以禁用清除启动消息,并使用Shift + PgUp / Down在TTY1上滚动浏览这些消息。
don_crissti

2
也许下面的Q / A给出了一句:superuser.com/questions/480370/...
拉尔夫Rönnquist

Answers:


1

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

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


如果您阅读注释,您会发现它systemd确实记录了这些内容。
don_crissti
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.