Как читать закрытые сообщения потом?

18

Я использую Lubuntu 11.10. Каждый раз, когда я закрываюсь, я могу прочитать FAIL красными буквами, но я не могу читать больше.

Итак, как прочитать сообщения журнала и попытаться решить проблему?

Sigur
источник
Посмотрите на этот ответ на askubuntu. Это может помочь вам с вашей проблемой.
solde9
все записано в /var/log/syslogи /var/log/messages, поэтому вам нужно прочитать их и устранить неполадки. Вы можете использовать io redirectionс error redirectionкогда вы используетеshutdown command
PersianGulf

Ответы:

14

Кажется, нет никакого способа записать эти данные в файл. Для процесса загрузки есть bootlogdпакет, который создает файл /var/log/boot, но ничего для процесса выключения / перезагрузки. Насколько я вижу, невозможно войти rsyslogни в один из них, и даже если они были, есть сообщения, напечатанные после rsyslogостановки. Часть моего процесса выключения / перезагрузки состоит в том, чтобы перемонтировать rootfs только для чтения и размонтировать все остальное, после чего запись в файл, который все еще будет там при следующей загрузке, практически невозможна.

Самый простой способ просмотреть сообщения - это отредактировать сценарии /etc/init.d/haltand и / или /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

Сохраните файл и выйдите. Теперь, когда вы выключаете систему, система приостанавливается до тех пор, пока вы не нажмете клавишу ввода (или CTRL-C, CTRL-D и т. Д.). Вы можете прочитать сообщения, напечатанные на экране. Если текст содержит более одного экрана, вы можете увидеть прокрутку терминала, нажав Shift+PgUp. Если этого по-прежнему недостаточно, есть способы увеличить размер буфера прокрутки (возможно, другой вопрос).

Чтобы сделать то же самое при перезагрузке системы, вам нужно отредактировать /etc/init.d/rebootфайл. Команда, используемая здесь, конечно, rebootв отличие от haltи должна быть снова в конце do_stopфункции. Для меня линия:

reboot -d -f -i

Снова просто вставьте следующее в новой строке выше:

read -p "Press enter to reboot" reply

Также обратите внимание, что эти файлы перечислены как conffiles для initscriptsпакета. Эти изменения по умолчанию не будут засорены при обновлении пакетов, хотя они могут вызвать конфликт.


Более полное решение было бы использовать следующий скрипт:

#! /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. dpkgТаким образом, при обновлении также не будет конфликтных ситуаций.

Graeme
источник
Довольно хорошее решение, особенно сценарий инициализации.
Михаил Морфиков
4

Самым простым решением может быть попытка сделать видео вместо фотографии. Вы можете пошагово пройти его по кадрам позже.

Джим Пэрис
источник
2
Я не могу поверить, что нет файла с этими сообщениями записаны !!! Я постараюсь записать по видео.
Сигур
7
Некоторые из этих сообщений печатаются после размонтирования файловых систем! Таким образом, они не могут все оказаться в файле.
Джим Пэрис
4

Просмотр журнала в режиме реального времени

Я обнаружил, что во время выключения обычно есть логотип Ubuntu и мигающие огни, которые отображаются вместо журнала процесса выключения. Если есть ошибки, то они вроде как показываются, но беспорядочно. Однако во время выключения, если я нажимаю клавишу Windows и r( Metar), я вижу, как происходит сбой системных служб, как они происходят. Итак, я знаю, что именно сломано. Не знаю, относится ли это сочетание клавиш к моей настройке Kubuntu или как; Я не добавил это .. Один из тех, кого я нашел случайно, как-то ...

Просмотр логов после перезагрузки

После перезагрузки системы сообщения об ошибках должны быть сохранены в лог-файл. Какой файл журнала зависит от того, какая служба сломана / неправильно настроена. Соответствующий журнал почти наверняка будет в /var/log/(или его подкаталоге). ls, less, grepИ findбыли единственными программами я , необходимой для поиска сообщений об ошибках в журналах ...

Как только вы нашли ошибку и службу, которая ее вызвала, вам не нужно перезагружаться, чтобы протестировать новую конфигурацию; просто перезапустите сервис. Надеемся, что вы можете протестировать фиксированную конфигурацию с помощью команды:

sudo service <service name> restart

Алекс Лич
источник
Это Windows + R или Alt + R вы нажимаете? Отображения по умолчанию отображают ключ Windows на супер и мета-ключ на alt, поэтому неясно, какой именно ключ вы описываете.
Кейси
3

После изучения того, как на bootlogdсамом деле удается вести протоколирование, выясняется, что его можно убедить зарегистрировать как процесс выключения / перезагрузки, так и процесс запуска. bootlogdзапускается рано в процессе загрузки. Затем он делает некоторые магии с ttyи ptsустройствами для входа вывода на терминал он подключен. Затем он останавливается позже в процессе загрузки, по-видимому, до того, как он начнет регистрировать выходные данные пользователя, работающего с tty.

Если bootlogdво время процесса выключения / перезагрузки произойдет повторный запуск и он будет остановлен до того, как файловая система, содержащая журнал, будет размонтирована, будет запись большей части процесса выключения, доступная для чтения при следующей загрузке.

bootlogdудается запустить и остановить во время запуска, используя два initсценария. Одним из них является нормальный initскрипт, который запускает / останавливает процесс как обычно. Другой является «обратным» initсценарием в том смысле, что при вызове с помощью startон вызывает первый сценарий с остановкой. Это «обманывает» sysvinitпроцесс, кажется, что он запускает две отдельные службы, когда он действительно запускается, и останавливает одну и ту же службу. Это необходимо, чтобы убедиться, что все происходит в правильном порядке.

Для bootlogdзапуска во время выключения требуется следующее:

  1. Установите, bootlogdесли вы еще этого не сделали.
  2. Скопируйте два сценария инициализации
  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удаляет escape-символы из текстового потока. Следующая 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/logнаходится на rootfs. Если нет, то зависимости должны быть переработаны так, чтобы umountfsэто было сделано после bootlogdостановки. Или же войти в файл в rootfs.

Graeme
источник
1

Вам нужно отредактировать все файлы /etc/rc6.d/* и перенаправить их вывод в какой-нибудь файл, который вы сможете прочитать позже.

Это перенаправление, также скажет вам, какая программа failedи why.

Кроме того, вы должны изменить start-stop-daemon, удалив --quietпараметр и добавив -vпараметр во все эти файлы.

Если вы делаете это, убедитесь, что вы откатите все изменения, которые вы сделали. Резервное копирование существующих файлов перед внесением изменений будет хорошей идеей.

SHW
источник
OK. Это займет много работы от меня. Я постараюсь. Благодарю.
Сигур
Дайте мне знать результат
SHW
Редактирование скриптов в /etc/init.d(все /etc/rc?.dссылки здесь) ничего не даст. Вывод не является прямым, он осуществляется через функции /lib/lsb/init-functionsи другие файлы, которые он, в свою очередь , получает . Вы можете отредактировать их, хотя некоторые обновления могут затормозить изменения.
Грэм
Единственная релевантная функция или бинарный код - start-stop-daemonиз OP PoV. Сейчас жду его ответа
SHW
@SHW Нет, посмотрите на сценарии. Большая часть выходных данных поступает из других частей сценария. Я не думаю, что start-stop-daemonпроизводит какой-либо вывод, по крайней мере, не нормально. Скрипты генерируют выходные данные ok / fail на основе своих возвращаемых результатов, используя log_end_msg. См /lib/lsb/init-functions.d/20-left-info-blocks.
Грэм,
0

/var/log/messagesдаст вам необходимые данные. если вам этого не достаточно, измените /etc/syslog.confдля регистрации всех данных (я бы хотел включить ведение журнала ошибок ядра, иначе * kern), но ОБНОВИТЕ ЭТО ОБРАТНО после перезагрузки, иначе будет много места для журналов.

Kaboom
источник
Существует нет /etc/syslog.conf. Есть только sysctl.conf sysctl.d/ systemd/.
Сигур
1
попробуйте /etc/rsyslog.conf
kaboom
0

Для моего ноутбука sudo haltбудет делать программное отключение, а не оборудование. т.е. экран и другое оборудование остаются работающими. Последнее сообщение на экране будет

Система остановлена

В этот момент я просто нажимаю кнопку питания и все выключается. Вы можете попробовать это. Вы также можете попробоватьsudo halt --verbose

Тотти
источник
Поэтому я думаю, что это абсолютно безопасный процесс. Никаких повреждений оборудования ?!
Сигур
0

Как сказал Грэм, с ro или отключенной файловой системой, убитым klogd, нет никакой возможности записать такую ​​информацию в файл. Решением может быть использование консоли (последовательного порта), определенной в bootargs. Просто подключите нуль-модемный кабель и другой компьютер (планшет или смартфон с соответствующим адаптером) и эмулятор терминала.

фич
источник
-1

Сообщения об ошибках (и другие) обычно скрыты по plymouthэстетическим причинам.

Возможно, это поможет: если вы нажмете ESC во время выключения, plymouthотобразится графическая консоль. Это показывает вам полезные сообщения?

Кроме того, вы мало что можете сделать, если машина действительно выйдет из строя, потому что она может быть не в состоянии записать файл журнала - будь он в буфере или /var/logуже перемонтирован только для чтения, в зависимости от того, когда происходит сбой. Вы могли бы взглянуть на эти файлы, выполнив ls -ltr /var/logи посмотрев, существует ли файл журнала, который соответствует вашей дате выключения (или новее).

Роберт Динс
источник