Wydaje się, że nie ma sposobu, aby zalogować te dane do pliku. W przypadku procesu rozruchu istnieje bootlogdpakiet, który tworzy plik /var/log/boot, ale nic w procesie zamykania / ponownego uruchamiania. Z tego co widzę, nie ma sposobu, aby się zalogować rsyslog, a nawet jeśli tak, to wiadomości są drukowane po rsyslogzatrzymaniu. Częścią mojego procesu zamykania / ponownego uruchamiania jest ponowne zamontowanie rootfów tylko do odczytu i odmontowanie wszystkiego innego, po tym logowaniu do pliku, który nadal będzie istniał przy następnym uruchomieniu, jest praktycznie niemożliwe.
Najprostszym sposobem, w jaki widzę wiadomości, jest edytowanie /etc/init.d/halti / lub /etc/init.d/rebootskryptów w celu wstrzymania tuż przed rzeczywistym halt/ reboot. W przypadku haltskryptu uruchom polecenie sudoedit /etc/init.d/halt(lub użyj edytora GUI) i poszukaj wiersza, który faktycznie się zatrzymuje. Dla mnie jest to linia:
halt -d -f $netdown $poweroff $hddown
W przeciwnym razie powinien znajdować się na końcu do_stopfunkcji i jedynym wierszu wywołującym haltpolecenie. Po znalezieniu linii wystarczy wstawić nową linię powyżej, wykonując następujące czynności:
read -p "Press enter to halt" reply
Zapisz plik i wyjdź. Teraz po wyłączeniu system wstrzyma się do momentu naciśnięcia klawisza Enter (lub CTRL-C, CTRL-D itp.). Możesz odczytać wiadomości wydrukowane na ekranie. Jeśli jest więcej niż jeden ekran tekstu, możesz przewijać terminal, naciskając Shift+PgUp. Jeśli to nadal nie wystarczy, istnieją sposoby na zwiększenie rozmiaru bufora przewijania (być może inne pytanie).
Aby zrobić to samo po ponownym uruchomieniu systemu, musisz edytować /etc/init.d/rebootplik. Polecenie użyte tutaj jest oczywiście rebootw przeciwieństwie do halti powinno znów znajdować się na końcu do_stopfunkcji. Dla mnie linia jest następująca:
reboot -d -f -i
Ponownie po prostu wstaw poniższe w nowym wierszu powyżej:
read -p "Press enter to reboot" reply
Zauważ też, że pliki te są wymienione jako pliki conffiles dla initscriptspakietu. Edycje te nie będą domyślnie blokowane podczas aktualizacji pakietów, chociaż powodują konflikt.
Bardziej kompletnym rozwiązaniem byłoby użycie następującego skryptu:
#! /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
To powinno być umieszczone /etc/init.d/pause_hooki może być włączone do uruchamiania przy zamykaniu / ponownym uruchomieniu za pomocą następującego polecenia:
sudo update-rc.d pause_hook defaults
Aby następnie włączyć faktyczny zaczep, utwórz pliki /etc/pause_hook.confzawierające linię:
PAUSE_HOOK_ENABLED=true
Proces zamykania / ponownego uruchamiania powinien teraz zostać wstrzymany tuż przed wywołaniem skryptu haltlub reboot, dając czas na przejrzenie wiadomości. Można go również łatwo wyłączyć / ponownie włączyć, komentując / usuwając komentarz z linii zezwolenia /etc/pause_hook.conf. W ten sposób nie wystąpią również dpkgkonflikty konfliktów podczas aktualizacji.