Gra*_*eme 15
似乎无法将此数据记录到文件中。对于启动过程,有bootlogd
创建文件的包/var/log/boot
,但没有用于关闭/重启过程。据我所知,rsyslog
两者都无法登录,即使有,也会在rsyslog
停止后打印消息。我的关机/重启过程的一部分是重新挂载 rootfs 只读并卸载其他所有内容,在此日志记录到下次启动时仍将存在的文件之后几乎是不可能的。
我可以看到查看消息的最简单方法是编辑/etc/init.d/halt
和/或/etc/init.d/reboot
脚本以在实际halt
/之前暂停reboot
。对于halt
脚本,运行命令sudoedit /etc/init.d/halt
(或使用 GUI 编辑器)并查找执行实际停止的行。对我来说,这是一条线:
halt -d -f $netdown $poweroff $hddown
Run Code Online (Sandbox Code Playgroud)
否则它应该在do_stop
函数的末尾,并且是唯一调用halt
命令的行。找到该行后,只需在上面插入一个新行,内容如下:
read -p "Press enter to halt" reply
Run Code Online (Sandbox Code Playgroud)
保存文件并退出。现在,当您关机时,系统将暂停,直到您按 Enter(或 CTRL-C、CTRL-D 等)。您可以阅读打印在屏幕上的消息。如果文本超过一屏,您可以通过按 来查看终端回滚Shift+PgUp
。如果这还不够,有一些方法可以增加回滚缓冲区的大小(虽然可能是一个不同的问题)。
要在系统重新启动时执行相同操作,您必须编辑该/etc/init.d/reboot
文件。这里使用的命令当然reboot
是相反的,halt
并且应该再次位于do_stop
函数的末尾。对我来说,这条线是:
reboot -d -f -i
Run Code Online (Sandbox Code Playgroud)
再次在上面的新行中插入以下内容:
read -p "Press enter to reboot" reply
Run Code Online (Sandbox Code Playgroud)
另请注意,这些文件被列为initscripts
包的conffiles 。默认情况下,升级包时不会破坏这些编辑,尽管它们会导致冲突。
更完整的解决方案是使用以下脚本:
#! /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
Run Code Online (Sandbox Code Playgroud)
这应该被放入/etc/init.d/pause_hook
并且可以使用以下命令在关闭/重新启动时运行:
sudo update-rc.d pause_hook defaults
Run Code Online (Sandbox Code Playgroud)
然后启用实际的钩子,创建/etc/pause_hook.conf
包含该行的文件:
PAUSE_HOOK_ENABLED=true
Run Code Online (Sandbox Code Playgroud)
关闭/重启过程现在应该在调用halt
orreboot
脚本之前暂停,以便有时间查看消息。它也可以通过注释/取消注释中的启用行轻松禁用/重新启用/etc/pause_hook.conf
。以dpkg
这种方式升级期间也不会有conffile 冲突。
最简单的解决方案可能是尝试拍摄视频而不是照片。您可以稍后逐帧浏览它。