之后如何阅读关闭消息?


18

我正在使用Lubuntu 11.10。每次关闭时,我都可以用红色字母阅读失败,但我看不到更多。

那么,如何阅读日志消息并尝试解决问题?


看看关于askubuntu的答案。它可以帮助您解决问题。
solde9 2012年

一切都记录在/var/log/syslog/var/log/messages,因此您需要阅读它们并进行故障排除。您可以使用io redirectionerror redirection当你使用shutdown command
波斯湾

Answers:


14

似乎没有办法将此数据记录到文件中。对于引导过程,有bootlogd用于创建文件的软件包/var/log/boot,而对于关机/重新引导过程则没有任何包。据我所知,两者均无法登录rsyslog,即使存在,也有rsyslog停止后打印的消息。我的关机/重新引导过程的一部分是将rootfs只读地重新装载,然后重新装载其他所有东西,在将日志记录到下次启动时仍然存在的文件之后,这几乎是不可能的。

我看到的查看消息的最简单方法是将/etc/init.d/haltand和/或/etc/init.d/reboot脚本编辑为在实际halt/ 之前暂停reboot。对于halt脚本,运行命令sudoedit /etc/init.d/halt(或使用GUI编辑器),然后查找实际停止的行。对我来说这是一行:

halt -d -f $netdown $poweroff $hddown

否则,它应该在do_stop函数的末尾,并且是调用halt命令的唯一行。找到该行后,只需在上面插入新行并添加以下内容:

read -p "Press enter to halt" reply

保存文件并退出。现在,当您关闭计算机时,系统将暂停直到您按Enter键(或CTRL-C,CTRL-D等)。您可以阅读屏幕上打印的消息。如果屏幕上显示的文本不止一个,则可以按来查看终端回滚Shift+PgUp。如果这还不够,可以使用多种方法来增加回滚缓冲区的大小(虽然可能是一个不同的问题)。

要在系统重新引导时执行相同的操作,必须编辑/etc/init.d/reboot文件。当然reboot,此处使用的命令halt与之相反,并且应该再次位于do_stop函数末尾。对我来说,行是:

reboot -d -f -i

再次在上面的新行中插入以下内容:

read -p "Press enter to reboot" reply

还要注意,这些文件被列为该initscripts程序包的配置文件。升级软件包时,默认情况下不会破坏这些编辑,尽管它们会引起冲突。


一个更完整的解决方案是使用以下脚本:

#! /bin/sh
### BEGIN INIT INFO
# Provides:          pause_hook
# Required-Start:
# Required-Stop:     halt reboot
# Default-Start:
# Default-Stop:      0 6
# X-Stop-After:      umountroot
# X-Interactive:     true
# Short-Description: Pause before halt or reboot
# Description:
### END INIT INFO

do_stop () {
    [ -r /etc/pause_hook.conf ] && . /etc/pause_hook.conf

    [ "$PAUSE_HOOK_ENABLED" = true ] && read -p "Press enter to continue" reply
}

case "$1" in
    start)
        # No-op
        ;;
    restart|reload|force-reload)
        echo "Error: argument '$1' not supported" >&2
        exit 3
        ;;
    stop)
        do_stop
        ;;
    *)
        echo "Usage: $0 start|stop" >&2
        exit 3
        ;;
esac

应该将其放置在其中,/etc/init.d/pause_hook并可以使用以下命令在关机/重新启动时使其运行:

sudo update-rc.d pause_hook defaults

然后,要启用实际的挂钩,请创建/etc/pause_hook.conf包含以下行的文件:

PAUSE_HOOK_ENABLED=true

现在,关闭/重新引导过程应该在调用haltreboot脚本之前暂停,从而有时间查看消息。也可以通过注释/取消注释中的启用行来轻松禁用/重新启用它/etc/pause_hook.confdpkg这样,在升级过程中也不会有conffile冲突。


一个很好的解决方案,尤其是init脚本。
Mikhail Morfikov 2014年

4

最简单的解决方案是尝试拍摄视频而不是照片。您可以稍后逐帧浏览。


2
我不敢相信没有记录这些消息的文件!!!我将尝试通过视频录制。
锡古尔

7
卸载文件系统后,其中一些消息会打印出来!因此,它们不能全部以文件结尾。
吉姆·巴黎

4

实时查看日志

我发现在关闭过程中通常会有一个Ubuntu徽标和指示灯闪烁,而不是显示关闭过程的日志。如果有错误,则将它们显示出来,但是会比较混乱。但是,在关闭时,如果我按Windows键和rMetar),那么我会看到系统服务的成功与失败,因为它们发生了。这样我就知道到底是什么东西坏了。不知道此键盘快捷键是特定于我的Kubuntu设置还是什么?我没有添加。.我偶然发现的其中一个,以某种方式...

重新启动后查看日志

重新引导系统后,错误消息应保存到日志文件中。哪个日志文件取决于哪个服务被破坏/配置错误。相关日志几乎肯定会在/var/log/(或其子目录中)。lslessgrepfind一直我需要在日志中查找错误消息的唯一项目...

找到错误和引起错误的服务后,您无需重新启动即可测试新配置;只需重新启动服务即可。希望您可以使用以下命令测试固定配置:

sudo service <service name> restart


您要按的是Windows + r还是Alt + r?默认映射将Windows键映射为super,将meta键映射为alt,因此不清楚您要描述的是哪个键。
casey 2014年

3

在研究了如何bootlogd实际执行日志记录之后,事实证明可以说服它记录关闭/重新引导过程以及启动过程。bootlogd在启动过程的早期启动。然后,它使用ttypts设备进行一些操作,将所有输出记录到与其连接的终端。然后在引导过程中稍后停止它,大概是在它开始记录来自的用户的输出之前tty

如果bootlogd在关闭/重新引导过程中再次启动并在卸载包含日志的文件系统之前停止,则将记录大多数关闭过程的记录,以供下次启动时读取。

bootlogd通过使用两个init脚本,可以在启动过程中同时启动和停止。一个是普通的init脚本,它可以正常启动/停止该过程。另一个是“反向” init脚本,其中当使用调用时start,它将使用stop调用第一个脚本。这“欺骗”了该sysvinit过程,看起来它实际上在启动和停止同一服务时正在启动两个单独的服务。这是确保一切按正确顺序发生的必要条件。

bootlogd在关机期间运行,需要执行以下操作:

  1. bootlogd如果尚未安装,请安装。
  2. 复制两个初始化脚本
  3. 使“反向”脚本更改从停止停止开始,而不是从开始停止。
  4. 更改LSB标头,以使两个脚本在关机/重新引导期间均在正确的时间运行
  5. 使用安装它们update-rc.d

这是我作为复制/粘贴bash脚本所做的更改(如果要手动进行更改,则我使用的LSB头位于补丁中):

cd /etc/init.d
cp bootlogd shutdown-bootlogd
cp stop-bootlogd shutdown-start-bootlogd

echo -e 'diff -ur ./shutdown-bootlogd /etc/init.d/shutdown-bootlogd
--- ./shutdown-bootlogd\t2014-02-20 13:59:23.426109512 +0000
+++ /etc/init.d/shutdown-bootlogd\t2014-02-20 11:10:56.238656828 +0000
@@ -1,14 +1,13 @@
 #! /bin/sh
-### BEGIN INIT INFO
-# Provides:          bootlogd
-# Required-Start:    mountdevsubfs
-# X-Start-Before:    hostname keymap keyboard-setup procps pcmcia hwclock hwclockfirst hdparm hibernate-cleanup lvm2
-# Required-Stop:
-# Default-Start:     S
-# Default-Stop:
-# Short-Description: Start or stop bootlogd.
-# Description:       Starts or stops the bootlogd log program
-#                    which logs boot messages.
+### BEGIN INIT INFO 
+# Provides:          shutdown-bootlogd 
+# Required-Start:
+# Required-Stop:     umountroot halt reboot 
+# Default-Start:      
+# Default-Stop:      0 6 
+# X-Stop-After:      umountfs 
+# Short-Description: Stop bootlogd at shutdown. 
+# Description: 
 ### END INIT INFO

 PATH=/sbin:/bin  # No remote fs at start
diff -ur ./shutdown-start-bootlogd /etc/init.d/shutdown-start-bootlogd
--- ./shutdown-start-bootlogd\t2014-02-20 13:59:23.430107513 +0000
+++ /etc/init.d/shutdown-start-bootlogd\t2014-02-20 11:10:56.238656828 +0000
@@ -1,24 +1,24 @@
 #! /bin/sh
 ### BEGIN INIT INFO
-# Provides:          stop-bootlogd
-# Required-Start:    $local_fs $all
-# Required-Stop:
-# Default-Start:     2 3 4 5
-# Default-Stop:
-# Short-Description: Stop bootlogd
-# Description:       See the init.d/bootlogd script
+# Provides:          shutdown-start-bootlogd
+# Required-Start:
+# Required-Stop:     $local_fs $all
+# Default-Start:
+# Default-Stop:      0 6
+# Short-Description: Start or stop bootlogd at shutdown.
+# Description:
 ### END INIT INFO

-NAME=stop-bootlogd
+NAME=shutdown-start-bootlogd
 DAEMON=/sbin/bootlogd

 [ -x "$DAEMON" ] || exit 0

 case "$1" in
-  start)
-\t/etc/init.d/bootlogd stop
+  stop)
+\t/etc/init.d/bootlogd start
 \t;;
-  stop|restart|force-reload)
+  start|restart|force-reload)
 \t# No-op
 \t;;
   status)
' | patch

update-rc.d shutdown-bootlogd defaults
update-rc.d shutdown-start-bootlogd defaults

bootlogd停止之前出现的所有消息都将存储在中/var/log/bootbootlogd从文本流中删除转义字符。以下(bash)命令将以关闭时显示的颜色显示日志颜色:

sed $'s/\^\[/\E/g;s/\[1G\[/\[27G\[/' /var/log/boot | less -r

有关此详细信息,请参阅此问题-/programming/10757823/display-file-with-escaped-color-codes-boot-messages-from-bootlog-daemon/19011140

可以通过进一步编辑脚本来更改日志的位置。不幸的是,文件的每一次出场必须改变(也更换/ver/log/boot是不够的脚本将cd/var/log在一个点)。

上面的内容也仅/var/log在rootfs上有效。如果不是,则需要重新处理依赖项,以便umountfsbootlogd停止后完成。否则登录到rootfs上的文件。


1

您需要编辑所有/etc/rc6.d/*文件,并将它们的输出重定向到某个文件,稍后可以阅读。

此重定向还会告诉您哪个程序 failedwhy

此外,您必须start-stop-daemon通过删除来修改--quiet参数并-v在所有这些文件中添加参数。

如果这样做,请确保将所有所做的更改回滚。在进行更改之前备份现有文件将是一个好主意。


好。这需要我做很多工作。我会尽力。谢谢。
Sigur 2014年

然后让我知道结果
SHW 2014年

/etc/init.d/etc/rc?.d到此处的所有链接)中编辑片段不会执行任何操作。输出不是直接的,而是通过它中的函数/lib/lsb/init-functions以及其他文件(这些文件又是它们的来源)提供的。您可以编辑这些,但是某些升级会掩盖更改。
Graeme 2014年

唯一相关的函数或二进制文件start-stop-daemon来自OP PoV。现在等待他的答复
2014年

@SHW不,看一下脚本。大多数输出​​来自脚本的其他部分。我认为不会start-stop-daemon产生任何输出,至少不会正常产生。脚本基于使用的返回输出生成ok / fail输出log_end_msg。请参阅/lib/lsb/init-functions.d/20-left-info-blocks
Graeme 2014年

0

/var/log/messages将为您提供所需的数据。如果您还不够,请修改/etc/syslog.conf为记录所有数据(我希望启用内核错误日志记录,也称为* kern),但在重新启动后再回退,否则它将占用大量日志空间


没有/etc/syslog.conf。只有sysctl.conf sysctl.d/ systemd/
Sigur 2014年

1
尝试/etc/rsyslog.conf
kaboom

0

对于我的笔记本电脑 sudo halt将关闭软件而不是关闭硬件。即屏幕和其他硬件仍在运行。屏幕上的最后一条消息将是

系统暂停

此时,我只需按下电源按钮,然后一切都关闭。你可以试试看 您也可以尝试sudo halt --verbose


所以我想这是一个完全安全的过程。硬件没有损坏吗?
Sigur

0

就像Graeme所说的那样,使用ro或卸除的文件系统,杀死klogd的方法无法将此类信息写入文件。一个解决方案可能是使用bootargs中定义的控制台(串行端口)。只需连接空调制解调器电缆和另一台PC(具有适当适配器的平板电脑或智能手机)和终端仿真器即可。


-1

错误(和其他)消息通常plymouth出于审美原因而被隐藏。

也许这会有所帮助:如果在关机期间按ESC,则会plymouth显示图形控制台。这会向您显示有用的消息吗?

除此之外,如果计算机真正崩溃,您几乎无能为力,因为它可能无法写入日志文件-无论是缓冲文件还是/var/log已经以只读方式重新挂载(取决于崩溃发生的时间)。您可以通过执行ls -ltr /var/log并查看是否有与您的关闭日期(或更新日期)匹配的日志文件来查看这些文件。

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.