在“启动序列” 1即将结束时,我看到一系列较长的诊断消息很快飞过,就在我看到登录提示2之前。
AFAICT,组成此短暂输出的大多数(如果不是全部)行都以下面显示的任一字符串开头
[ OK ]
[FAILED]
...其中OK
为绿色,FAILED
为红色3。
这些消息闪现的时间太短,我无法阅读。
我的问题是:
有没有办法让这些消息更容易阅读?
我想到的可能的解决方案包括(按优先顺序排列):
- 发送(或简单地重定向)这些消息逐字4一些持久性日志文件;
- 启用分页式机制(
Press any key to continue...
); - 在打印这些消息后插入一个暂停(可配置长度);
- 启用某些按键(或按键组合)以暂停到屏幕的输出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
...其中chgrp
和chmod
命令的目的是使 的所有权和权限与/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
LockPause/
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 的新等效项,您可以更改它。