Кажется, нет никакого способа записать эти данные в файл. Для процесса загрузки есть bootlogd
пакет, который создает файл /var/log/boot
, но ничего для процесса выключения / перезагрузки. Насколько я вижу, невозможно войти rsyslog
ни в один из них, и даже если они были, есть сообщения, напечатанные после rsyslog
остановки. Часть моего процесса выключения / перезагрузки состоит в том, чтобы перемонтировать rootfs только для чтения и размонтировать все остальное, после чего запись в файл, который все еще будет там при следующей загрузке, практически невозможна.
Самый простой способ просмотреть сообщения - это отредактировать сценарии /etc/init.d/halt
and и / или /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
Сохраните файл и выйдите. Теперь, когда вы выключаете систему, система приостанавливается до тех пор, пока вы не нажмете клавишу ввода (или 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
Также обратите внимание, что эти файлы перечислены как conffiles для 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
Процесс завершения работы / перезагрузки теперь должен приостанавливаться непосредственно перед halt
вызовом reboot
сценария или , давая время для просмотра сообщений. Это также может быть легко отключено / повторно включено, комментируя / раскомментируя строку включения в /etc/pause_hook.conf
. dpkg
Таким образом, при обновлении также не будет конфликтных ситуаций.