シャットダウンメッセージを後で読む方法は?


18

Lubuntu 11.10を使用しています。シャットダウンするたびに赤い文字でFAILを読むことができますが、これ以上読むことはできません。

それでは、ログメッセージを読んで問題を解決する方法を教えてください。


askubuntuのこの回答をご覧ください。問題の解決に役立つ場合があります。
solde9

すべてがでrecored /var/log/syslog/var/log/messages、だから、彼らとthroubleshootを読む必要があります。あなたは使用することができますio redirectionerror redirection、あなたが使用している場合shutdown command
ペルシア湾

回答:


14

このデータをファイルに記録する方法はないようです。ブートプロセスにbootlogdは、ファイルを作成するパッケージがあります/var/log/bootが、シャットダウン/リブートプロセスには何もありません。私が見る限り、rsyslogどちらでもログを記録する方法はなく、たとえあったとしても、rsyslog停止後にメッセージが出力されます。私のシャットダウン/リブートプロセスの一部は、rootfsを読み取り専用で再マウントし、他のすべてをアンマウントすることです。このログは、次回のブート時にまだ存在するファイルに実質的に不可能です。

メッセージを表示する最も簡単な方法は、実際の/の直前で一時停止するように/etc/init.d/haltand / or /etc/init.d/rebootスクリプトを編集することです。以下のためのスクリプト、コマンドを実行します(またはGUIエディタを使用)と実際の停止を行う行を探します。私にとってこれは行です:haltreboothaltsudoedit /etc/init.d/halt

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

シャットダウン/リブートプロセスは、haltor rebootスクリプトが呼び出される直前に一時停止し、メッセージを表示する時間を与えます。の有効化行をコメント化/コメント解除することで、簡単に無効化/再有効化することもできます/etc/pause_hook.conf。また、dpkgこの方法でアップグレード中にconffileの競合は発生しません。


かなりいい解決策、特にinitスクリプト。
ミハイルモルフィコフ14

4

最も簡単な解決策は、写真ではなくビデオを撮ることです。後でフレームごとにステップスルーできます。


2
これらのメッセージが記録されたファイルがないとは信じられません!!! ビデオで録画してみます。
シグル

7
これらのメッセージの一部は、ファイルシステムがアンマウントされた後に出力されます!そのため、すべてをファイルにすることはできません。
ジム・パリ

4

リアルタイムでログを見る

シャットダウン中は、通常、Ubuntuのロゴと点滅するライトがあり、シャットダウンプロセスのログの代わりに表示されることがわかりました。エラーがある場合、それらは表示されますが、面倒です。ただし、シャットダウン中にWindowsキーとrMetar)を押すと、システムサービスの成功と失敗が発生するのがわかります。だから、私は正確に壊れているものを知っています。このキーボードショートカットがKubuntuのセットアップに固有のものなのか、それとも何なのかわかりません。追加しませんでした。

再起動後のログの表示

システムを再起動すると、エラーメッセージがログファイルに保存されます。どのログファイルは、どのサービスが壊れているか、誤って設定されているかによって異なります。関連ログはほぼ間違いなく/var/log/(またはそのサブディレクトリ)にあります。lslessgrepfind私はログにエラーメッセージを見つけるために必要なてきただけでプログラムされています...

エラーとそれを引き起こしたサービスを見つけたら、新しい構成をテストするために再起動する必要はありません。サービスを再起動するだけです。うまくいけば、次のようなコマンドで固定構成をテストできます。

sudo service <service name> restart


押しているのはWindows + rまたはAlt + rですか?デフォルトのマッピングでは、windowsキーをsuperに、metaキーをaltにマッピングしているため、どのキーを記述しているかが正確にわかりません。
ケーシー14

3

bootlogd実際にログを記録する方法を調べたところ、シャットダウン/再起動プロセスと起動プロセスをログに記録するように説得できることがわかりました。bootlogd起動プロセスの早い段階で開始されます。次にttyptsデバイスとの魔法を実行して、すべての出力を接続先の端末に記録します。その後、おそらくで作業しているユーザーからの出力のログを開始する前に、ブートプロセスの後半で停止しますtty

場合はbootlogd、ISがシャットダウン/再起動プロセス中に再び気合と停止ログを含むいずれかのファイルシステムがアンマウントされる前に、次のブート時に読むことが可能なシャットダウンプロセスのほとんどの記録があるでしょう。

bootlogd2つのinitスクリプトを使用することで、起動時に起動と停止の両方を管理できます。1つは、通常どおりinitプロセスを開始/停止する通常のスクリプトです。もう1つは「逆」initスクリプトであり、で呼び出されるとstart、停止して最初のスクリプトを呼び出します。これはsysvinitプロセスを「トリック」し、同じサービスを実際に開始および停止しているときに2つの別個のサービスを開始しているように見えます。これは、すべてが正しい順序で行われるようにするために必要です。

作るためにbootlogdシャットダウン時に実行、必要とされるものは以下のとおりです。

  1. bootlogdまだインストールしていない場合はインストールします。
  2. 2つのinitスクリプトをコピーします
  3. 「反転」スクリプトを、開始から停止ではなく停止から開始に変更します。
  4. シャットダウン/リブート中に両方のスクリプトが適切なタイミングで実行されるように、LSBヘッダーを変更します
  5. でインストールします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

これに関する詳細については、この質問を参照してください-/programming/10757823/display-file-with-escaped-color-codes-boot-messages-from-bootlog-daemon/19011140

ログの場所は、スクリプトをさらに編集することで変更できます。残念ながら、ファイルのすべての外観を変更しなければならない(また、交換することは/ver/log/bootありません十分なスクリプトがそうであるようであるcd/var/log一点で)。

上記も/var/logrootfs上にある場合にのみ機能します。そうでない場合、依存関係を修正する必要があるため、停止umountfs後に実行されbootlogdます。または、rootfs上のファイルにログを記録します。


1

すべての/etc/rc6.d/*ファイルを編集し、それらの出力をいくつかのファイルにリダイレクトする必要があります。このファイルは後で読むことができます。

このリダイレクションは、どのプログラムfailedとをも教えてくれますwhy

さらに、これらのすべてのファイルでパラメーターをstart-stop-daemon削除し、--quietパラメーターを追加して、変更する必要があり-vます。

そうしている場合は、行ったすべての変更をロールバックします。変更を行う前に既存のファイルをバックアップすることをお勧めします。


OK。これには私から多くの仕事が必要です。私が試してみます。ありがとう。
シグル14

結果を教えてください
SHW 14

/etc/init.d/etc/rc?.dここへのリンクにあるすべて)のスリップを編集しても何も起こりません。出力は直接的なものではなく、関数/lib/lsb/init-functionsおよび他のファイルを介して出力されます。これらを編集することもできますが、一部のアップグレードでは変更が上書きされます。
グレアム14

関連する唯一の関数またはバイナリはstart-stop-daemon、OPs PoVからのものです。今、彼の返事を待っている
SHW

@SHWいいえ、スクリプトを見てください。ほとんどの出力は、スクリプトの他の部分からのものです。start-stop-daemon少なくとも通常は、出力を生成しないと思います。スクリプトは、を使用して、その戻り出力に基づいてok / fail出力を生成しlog_end_msgます。をご覧ください/lib/lsb/init-functions.d/20-left-info-blocks
グレアム14

0

/var/log/messages必要なデータを提供します。十分でない場合は、/etc/syslog.confすべてのデータをログに記録するように変更します(カーネルエラーのログ記録を有効にするようにします(別名* kern))が、リブート後にREVERT IT BACK


ありません/etc/syslog.conf。のみがありますsysctl.conf sysctl.d/ systemd/
シグル14


0

私のラップトップでsudo haltは、ハードウェアではなくソフトウェアのシャットダウンが行われます。つまり、画面と他のハードウェアは実行されたままです。画面の最後のメッセージは

システム停止

この時点で、電源ボタンを押すだけですべてがオフになります。これを試すことができます。あなたも試してみてくださいsudo halt --verbose


したがって、これは完全に安全なプロセスだと思います。ハードウェアに損傷はありませんか?!
シグル14

0

Graemeが言ったように、roまたはマウント解除されたファイルシステムでklogdを殺したのは、そのような情報をファイルに書き込む方法がありません。解決策は、bootargsで定義されたコンソール(シリアルポート)を使用することです。ヌルモデムケーブルと別のPC(適切なアダプターを備えたタブレットまたはスマートフォン)およびターミナルエミュレーターを接続するだけです。


-1

エラー(およびその他の)メッセージは通常plymouth、審美的な理由で隠されています。

おそらくこれが役立ちます:シャットダウン中にESCを押すとplymouth、グラフィカルコンソールが表示されます。役に立つメッセージが表示されていますか?

それとは別に/var/log、クラッシュが発生した時期に応じて、ログファイルを書き込むことができないためにマシンが実際にクラッシュした場合、バッファリングされているか、すでに読み取り専用で再マウントされているかなど、できることはほとんどありません。ls -ltr /var/logシャットダウン日(またはそれ以降)に一致するログファイルがあるかどうかを実行して調べることで、これらのファイルを見ることができます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.