Dường như không có cách nào để ghi dữ liệu này vào một tệp. Đối với quá trình khởi động, có bootlogd
gói tạo tệp /var/log/boot
, nhưng không có gì cho quá trình tắt / khởi động lại. Theo như tôi có thể thấy, không có cách nào để đăng nhập rsyslog
cả, và ngay cả khi có, có những tin nhắn được in sau đó rsyslog
bị dừng lại. Một phần trong quá trình tắt / khởi động lại của tôi là để nhắc lại các rootfs chỉ đọc và bỏ qua mọi thứ khác, sau khi đăng nhập vào một tệp vẫn sẽ ở đó trong lần khởi động tiếp theo là gần như không thể.
Cách dễ nhất tôi có thể thấy để xem các tin nhắn là chỉnh sửa /etc/init.d/halt
và / hoặc /etc/init.d/reboot
tập lệnh để tạm dừng ngay trước khi thực tế halt
/ reboot
. Đối với halt
tập lệnh, hãy chạy lệnh sudoedit /etc/init.d/halt
(hoặc sử dụng trình soạn thảo GUI) và tìm dòng tạm dừng thực tế. Đối với tôi đây là dòng:
halt -d -f $netdown $poweroff $hddown
Nếu không thì nó sẽ ở cuối do_stop
hàm và dòng duy nhất gọi halt
lệnh. Khi bạn tìm thấy dòng, chỉ cần chèn một dòng mới ở trên với những điều sau đây:
read -p "Press enter to halt" reply
Lưu file và thoát. Bây giờ khi bạn tắt máy, hệ thống sẽ tạm dừng cho đến khi bạn nhấn enter (hoặc CTRL-C, CTRL-D, v.v.). Bạn có thể đọc các tin nhắn được in trên màn hình. Nếu có nhiều hơn một màn hình văn bản, bạn có thể thấy cuộn ngược thiết bị đầu cuối bằng cách nhấn Shift+PgUp
. Nếu điều này vẫn chưa đủ, có nhiều cách để tăng kích thước của bộ đệm cuộn lại (có lẽ là một câu hỏi khác).
Để làm tương tự khi hệ thống khởi động lại, bạn phải chỉnh sửa /etc/init.d/reboot
tệp. Tất nhiên, lệnh được sử dụng ở đây reboot
trái ngược với halt
và sẽ lại nằm ở cuối do_stop
hàm. Đối với tôi dòng là:
reboot -d -f -i
Một lần nữa chỉ cần chèn dòng sau vào một dòng mới ở trên:
read -p "Press enter to reboot" reply
Cũng lưu ý rằng các tệp này được liệt kê dưới dạng conffiles cho initscripts
gói. Các chỉnh sửa này sẽ không bị chặn theo mặc định khi các gói được nâng cấp, mặc dù chúng sẽ gây ra xung đột.
Một giải pháp hoàn chỉnh hơn sẽ là sử dụng tập lệnh sau:
#! /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
Điều này nên được đặt trong /etc/init.d/pause_hook
và có thể được kích hoạt để chạy khi tắt / khởi động lại bằng lệnh sau:
sudo update-rc.d pause_hook defaults
Để sau đó kích hoạt hook thực tế, hãy tạo các tệp /etc/pause_hook.conf
chứa dòng:
PAUSE_HOOK_ENABLED=true
Quá trình tắt / khởi động lại bây giờ sẽ tạm dừng ngay trước khi halt
hoặc reboot
tập lệnh được gọi, dành thời gian để xem các tin nhắn. Nó cũng có thể dễ dàng bị vô hiệu hóa / kích hoạt lại bằng cách bình luận / không thông báo dòng kích hoạt trong /etc/pause_hook.conf
. Cũng sẽ không có dpkg
xung đột nào trong quá trình nâng cấp theo cách này.