Wydaje się, że nie ma sposobu, aby zalogować te dane do pliku. W przypadku procesu rozruchu istnieje bootlogd
pakiet, 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 rsyslog
zatrzymaniu. 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/halt
i / lub /etc/init.d/reboot
skryptów w celu wstrzymania tuż przed rzeczywistym halt
/ reboot
. W przypadku halt
skryptu 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_stop
funkcji i jedynym wierszu wywołującym halt
polecenie. 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/reboot
plik. Polecenie użyte tutaj jest oczywiście reboot
w przeciwieństwie do halt
i powinno znów znajdować się na końcu do_stop
funkcji. 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 initscripts
pakietu. 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_hook
i 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.conf
zawierające linię:
PAUSE_HOOK_ENABLED=true
Proces zamykania / ponownego uruchamiania powinien teraz zostać wstrzymany tuż przed wywołaniem skryptu halt
lub 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ż dpkg
konflikty konfliktów podczas aktualizacji.