Кажется, нет никакого способа записать эти данные в файл. Для процесса загрузки есть 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
Сохраните файл и выйдите. Теперь, когда вы выключаете систему, система приостанавливается до тех пор, пока вы не нажмете клавишу ввода (или 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Таким образом, при обновлении также не будет конфликтных ситуаций.