Lubuntu 11.10を使用しています。シャットダウンするたびに、FAILを赤い文字で読むことができますが、それ以上読むことはできません。
では、ログメッセージを読んで問題を解決する方法を教えてください。
このデータをファイルに記録する方法がないようです。ブートプロセスには、ファイル/var/log/boot
を作成するbootlogd
パッケージがありますが、シャットダウン/再起動プロセスにはありません。私が見る限り、rsyslog
でログを記録する方法もありません。たとえあったとしても、rsyslog
が停止した後にメッセージが出力されます。シャットダウン/再起動プロセスの一部は、rootfsを読み取り専用で再マウントし、他のすべてをアンマウントすることです。次の起動時にまだ存在するファイルへのこのロギングは事実上不可能です。
メッセージを確認する最も簡単な方法は、/etc/init.d/halt
および/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
ファイルを保存して終了します。シャットダウンすると、Enterキー(またはCTRL-C、CTRL-Dなど)を押すまでシステムが一時停止します。画面に表示されたメッセージを読むことができます。 1画面以上のテキストがある場合は、Shift+PgUp
を押すとターミナルのスクロールバックが表示されます。それでも不十分な場合は、スクロールバックバッファーのサイズを増やす方法があります(おそらく別の質問です)。
システムの再起動時に同じことを行うには、/etc/init.d/reboot
ファイルを編集する必要があります。ここで使用されるコマンドは、もちろんreboot
ではなくhalt
であり、再びdo_stop
関数の最後に置く必要があります。私にとっての行は:
reboot -d -f -i
もう一度、上記の新しい行に以下を挿入します。
read -p "Press enter to reboot" reply
これらのファイルがinitscripts
パッケージのconffilesとしてリストされていることにも注意してください。これらの編集は、パッケージのアップグレード時にデフォルトで破棄されませんが、競合が発生します。
より完全な解決策は、次のスクリプトを使用することです。
#! /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
のenable行をコメント/コメント解除することで、簡単に無効化/再有効化することもできます。この方法では、アップグレード中にdpkg
conffileの競合も発生しません。
bootlogd
が実際にロギングを実行する方法を調べたところ、シャットダウン/再起動プロセスとスタートアッププロセスをログに記録するように説得できることがわかりました。 bootlogd
は、ブートプロセスの早い段階で開始されます。次に、tty
およびpts
デバイスを使用して、すべての出力を接続先の端末に記録します。その後、おそらくtty
で作業しているユーザーからの出力のロギングを開始する前に、ブートプロセスの後半で停止されます。
シャットダウン/再起動プロセス中にbootlogd
が再度起動され、ログを含むファイルシステムがマウント解除される前に停止すると、次回の起動時に使用できるシャットダウンプロセスのほとんどが記録されます。
bootlogd
は、2つのinit
スクリプトを使用することにより、起動時に起動と停止の両方を管理できます。 1つは通常のinit
スクリプトで、通常どおりプロセスを開始/停止します。もう1つは「逆」のinit
スクリプトで、start
で呼び出されると、最初のスクリプトを停止で呼び出します。これはsysvinit
プロセスを「だまし」、実際に同じサービスを開始および停止しているときに2つの別々のサービスを開始しているように見えます。これは、すべてが正しい順序で行われるようにするために必要です。
シャットダウン中にbootlogd
を実行するには、以下が必要です。
bootlogd
をインストールします。update-rc.d
を使用してインストールします。コピー/貼り付けbash
スクリプトとしての私の変更を以下に示します(手動で変更を加えたい場合は、使用したLSBヘッダーがパッチに含まれています)。
cd /etc/init.d
cp bootlogd shutdown-bootlogd
cp stop-bootlogd shutdown-start-bootlogd
echo -e 'diff -ur ./shutdown-bootlogd /etc/init.d/shutdown-bootlogd
--- ./shutdown-bootlogd\t2014-02-20 13:59:23.426109512 +0000
+++ /etc/init.d/shutdown-bootlogd\t2014-02-20 11:10:56.238656828 +0000
@@ -1,14 +1,13 @@
#! /bin/sh
-### BEGIN INIT INFO
-# Provides: bootlogd
-# Required-Start: mountdevsubfs
-# X-Start-Before: hostname keymap keyboard-setup procps pcmcia hwclock hwclockfirst hdparm hibernate-cleanup lvm2
-# Required-Stop:
-# Default-Start: S
-# Default-Stop:
-# Short-Description: Start or stop bootlogd.
-# Description: Starts or stops the bootlogd log program
-# which logs boot messages.
+### BEGIN INIT INFO
+# Provides: shutdown-bootlogd
+# Required-Start:
+# Required-Stop: umountroot halt reboot
+# Default-Start:
+# Default-Stop: 0 6
+# X-Stop-After: umountfs
+# Short-Description: Stop bootlogd at shutdown.
+# Description:
### END INIT INFO
PATH=/sbin:/bin # No remote fs at start
diff -ur ./shutdown-start-bootlogd /etc/init.d/shutdown-start-bootlogd
--- ./shutdown-start-bootlogd\t2014-02-20 13:59:23.430107513 +0000
+++ /etc/init.d/shutdown-start-bootlogd\t2014-02-20 11:10:56.238656828 +0000
@@ -1,24 +1,24 @@
#! /bin/sh
### BEGIN INIT INFO
-# Provides: stop-bootlogd
-# Required-Start: $local_fs $all
-# Required-Stop:
-# Default-Start: 2 3 4 5
-# Default-Stop:
-# Short-Description: Stop bootlogd
-# Description: See the init.d/bootlogd script
+# Provides: shutdown-start-bootlogd
+# Required-Start:
+# Required-Stop: $local_fs $all
+# Default-Start:
+# Default-Stop: 0 6
+# Short-Description: Start or stop bootlogd at shutdown.
+# Description:
### END INIT INFO
-NAME=stop-bootlogd
+NAME=shutdown-start-bootlogd
DAEMON=/sbin/bootlogd
[ -x "$DAEMON" ] || exit 0
case "$1" in
- start)
-\t/etc/init.d/bootlogd stop
+ stop)
+\t/etc/init.d/bootlogd start
\t;;
- stop|restart|force-reload)
+ start|restart|force-reload)
\t# No-op
\t;;
status)
' | patch
update-rc.d shutdown-bootlogd defaults
update-rc.d shutdown-start-bootlogd defaults
bootlogd
が停止する前に表示されるすべてのメッセージは、/var/log/boot
に格納されます。 bootlogd
は、テキストストリームからエスケープ文字を削除します。次の(bash
)コマンドは、シャットダウン中に表示されるように、ログを色で表示します。
sed $'s/\^\[/\E/g;s/\[1G\[/\[27G\[/' /var/log/boot | less -r
これの詳細については、この質問を参照してください- https://stackoverflow.com/questions/10757823/display-file-with-escaped-color-codes-boot-messages-from-bootlog-daemon/1901114 =
ログの場所は、スクリプトをさらに編集することで変更できます。残念ながら、ファイルの外観はすべて変更する必要があります(また、スクリプトがcd
から/ver/log/boot
を一度に実行するため、/var/log
を置き換えるだけでは不十分です)。
上記は、/var/log
がrootfsにある場合にのみ機能します。そうでない場合は、umountfs
が停止した後にbootlogd
が実行されるように依存関係を修正する必要があります。または、rootfs上のファイルにログを記録します。
/var/log/messages
は、必要なデータを提供します。それで十分でない場合は、modify/etc/syslog.conf
すべてのデータをログに記録します(カーネルエラーログを有効にするように見えますが、* kernとも呼ばれます)がREVERT IT BACK再起動後ログのためにたくさんのスペースを食べる
Graemeが言ったように、roまたはマウント解除されたファイルシステムでは、klogdを強制終了しました。そのような情報をファイルに書き込む方法はありません。解決策は、bootargsで定義されたコンソール(シリアルポート)を使用することです。ヌルモデムケーブルと別のPC(タブレットまたはスマートフォンと適切なアダプター)およびターミナルエミュレーターを接続するだけです。