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ó bootlogdgó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 rsyslogcả, và ngay cả khi có, có những tin nhắn được in sau đó rsyslogbị 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/haltvà / hoặc /etc/init.d/reboottập lệnh để tạm dừng ngay trước khi thực tế halt/ reboot. Đối với halttậ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_stophàm và dòng duy nhất gọi haltlệ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/reboottệp. Tất nhiên, lệnh được sử dụng ở đây reboottrái ngược với haltvà sẽ lại nằm ở cuối do_stophà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 initscriptsgó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_hookvà 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.confchứ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 halthoặc reboottậ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ó dpkgxung đột nào trong quá trình nâng cấp theo cách này.