Посмотрите на этот ответ на 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Таким образом, при обновлении также не будет конфликтных ситуаций.
Я не могу поверить, что нет файла с этими сообщениями записаны !!! Я постараюсь записать по видео.
Сигур
7
Некоторые из этих сообщений печатаются после размонтирования файловых систем! Таким образом, они не могут все оказаться в файле.
Джим Пэрис
4
Просмотр журнала в режиме реального времени
Я обнаружил, что во время выключения обычно есть логотип Ubuntu и мигающие огни, которые отображаются вместо журнала процесса выключения. Если есть ошибки, то они вроде как показываются, но беспорядочно. Однако во время выключения, если я нажимаю клавишу Windows и r( Metar), я вижу, как происходит сбой системных служб, как они происходят. Итак, я знаю, что именно сломано. Не знаю, относится ли это сочетание клавиш к моей настройке Kubuntu или как; Я не добавил это .. Один из тех, кого я нашел случайно, как-то ...
Просмотр логов после перезагрузки
После перезагрузки системы сообщения об ошибках должны быть сохранены в лог-файл. Какой файл журнала зависит от того, какая служба сломана / неправильно настроена. Соответствующий журнал почти наверняка будет в /var/log/(или его подкаталоге). ls, less, grepИ findбыли единственными программами я , необходимой для поиска сообщений об ошибках в журналах ...
Как только вы нашли ошибку и службу, которая ее вызвала, вам не нужно перезагружаться, чтобы протестировать новую конфигурацию; просто перезапустите сервис. Надеемся, что вы можете протестировать фиксированную конфигурацию с помощью команды:
Это Windows + R или Alt + R вы нажимаете? Отображения по умолчанию отображают ключ Windows на супер и мета-ключ на alt, поэтому неясно, какой именно ключ вы описываете.
Кейси
3
После изучения того, как на bootlogdсамом деле удается вести протоколирование, выясняется, что его можно убедить зарегистрировать как процесс выключения / перезагрузки, так и процесс запуска. bootlogdзапускается рано в процессе загрузки. Затем он делает некоторые магии с ttyи ptsустройствами для входа вывода на терминал он подключен. Затем он останавливается позже в процессе загрузки, по-видимому, до того, как он начнет регистрировать выходные данные пользователя, работающего с tty.
Если bootlogdво время процесса выключения / перезагрузки произойдет повторный запуск и он будет остановлен до того, как файловая система, содержащая журнал, будет размонтирована, будет запись большей части процесса выключения, доступная для чтения при следующей загрузке.
bootlogdудается запустить и остановить во время запуска, используя два initсценария. Одним из них является нормальный initскрипт, который запускает / останавливает процесс как обычно. Другой является «обратным» initсценарием в том смысле, что при вызове с помощью startон вызывает первый сценарий с остановкой. Это «обманывает» sysvinitпроцесс, кажется, что он запускает две отдельные службы, когда он действительно запускается, и останавливает одну и ту же службу. Это необходимо, чтобы убедиться, что все происходит в правильном порядке.
Для bootlogdзапуска во время выключения требуется следующее:
Установите, bootlogdесли вы еще этого не сделали.
Скопируйте два сценария инициализации
Сделайте так, чтобы «обратное» изменение сценария остановилось, чтобы начать вместо начала и остановить
Измените заголовки LSB, чтобы оба сценария запускались в нужное время во время выключения / перезагрузки
Установите их с помощью 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
Расположение журнала может быть изменено путем дальнейшего редактирования скриптов. К сожалению , каждый вид файла должен быть изменен (тоже, замена /ver/log/bootне достаточно , так как скрипт делает , cdчтобы /var/logв одной точке).
Вышеуказанное также будет работать только в том случае, если он /var/logнаходится на rootfs. Если нет, то зависимости должны быть переработаны так, чтобы umountfsэто было сделано после bootlogdостановки. Или же войти в файл в rootfs.
Вам нужно отредактировать все файлы /etc/rc6.d/* и перенаправить их вывод в какой-нибудь файл, который вы сможете прочитать позже.
Это перенаправление, также скажет вам, какая программа failedи why.
Кроме того, вы должны изменить start-stop-daemon, удалив --quietпараметр и добавив -vпараметр во все эти файлы.
Если вы делаете это, убедитесь, что вы откатите все изменения, которые вы сделали. Резервное копирование существующих файлов перед внесением изменений будет хорошей идеей.
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), но ОБНОВИТЕ ЭТО ОБРАТНО после перезагрузки, иначе будет много места для журналов.
Существует нет /etc/syslog.conf. Есть только sysctl.conf sysctl.d/ systemd/.
Сигур
1
попробуйте /etc/rsyslog.conf
kaboom
0
Для моего ноутбука sudo haltбудет делать программное отключение, а не оборудование. т.е. экран и другое оборудование остаются работающими. Последнее сообщение на экране будет
Система остановлена
В этот момент я просто нажимаю кнопку питания и все выключается. Вы можете попробовать это. Вы также можете попробоватьsudo halt --verbose
Поэтому я думаю, что это абсолютно безопасный процесс. Никаких повреждений оборудования ?!
Сигур
0
Как сказал Грэм, с ro или отключенной файловой системой, убитым klogd, нет никакой возможности записать такую информацию в файл. Решением может быть использование консоли (последовательного порта), определенной в bootargs. Просто подключите нуль-модемный кабель и другой компьютер (планшет или смартфон с соответствующим адаптером) и эмулятор терминала.
Сообщения об ошибках (и другие) обычно скрыты по plymouthэстетическим причинам.
Возможно, это поможет: если вы нажмете ESC во время выключения, plymouthотобразится графическая консоль. Это показывает вам полезные сообщения?
Кроме того, вы мало что можете сделать, если машина действительно выйдет из строя, потому что она может быть не в состоянии записать файл журнала - будь он в буфере или /var/logуже перемонтирован только для чтения, в зависимости от того, когда происходит сбой. Вы могли бы взглянуть на эти файлы, выполнив ls -ltr /var/logи посмотрев, существует ли файл журнала, который соответствует вашей дате выключения (или новее).
/var/log/syslog
и/var/log/messages
, поэтому вам нужно прочитать их и устранить неполадки. Вы можете использоватьio redirection
сerror redirection
когда вы используетеshutdown command
Ответы:
Кажется, нет никакого способа записать эти данные в файл. Для процесса загрузки есть
bootlogd
пакет, который создает файл/var/log/boot
, но ничего для процесса выключения / перезагрузки. Насколько я вижу, невозможно войтиrsyslog
ни в один из них, и даже если они были, есть сообщения, напечатанные послеrsyslog
остановки. Часть моего процесса выключения / перезагрузки состоит в том, чтобы перемонтировать rootfs только для чтения и размонтировать все остальное, после чего запись в файл, который все еще будет там при следующей загрузке, практически невозможна.Самый простой способ просмотреть сообщения - это отредактировать сценарии
/etc/init.d/halt
and и / или/etc/init.d/reboot
сделать паузу непосредственно перед фактическимhalt
/reboot
. Дляhalt
сценария выполните командуsudoedit /etc/init.d/halt
(или используйте редактор GUI) и найдите строку, которая фактически останавливает работу. Для меня это линия:В противном случае он должен быть в конце
do_stop
функции и единственной строке, которая вызываетhalt
команду. Как только вы найдете строку, просто вставьте новую строку выше со следующим:Сохраните файл и выйдите. Теперь, когда вы выключаете систему, система приостанавливается до тех пор, пока вы не нажмете клавишу ввода (или CTRL-C, CTRL-D и т. Д.). Вы можете прочитать сообщения, напечатанные на экране. Если текст содержит более одного экрана, вы можете увидеть прокрутку терминала, нажав
Shift+PgUp
. Если этого по-прежнему недостаточно, есть способы увеличить размер буфера прокрутки (возможно, другой вопрос).Чтобы сделать то же самое при перезагрузке системы, вам нужно отредактировать
/etc/init.d/reboot
файл. Команда, используемая здесь, конечно,reboot
в отличие отhalt
и должна быть снова в концеdo_stop
функции. Для меня линия:Снова просто вставьте следующее в новой строке выше:
Также обратите внимание, что эти файлы перечислены как conffiles для
initscripts
пакета. Эти изменения по умолчанию не будут засорены при обновлении пакетов, хотя они могут вызвать конфликт.Более полное решение было бы использовать следующий скрипт:
Это должно быть помещено в
/etc/init.d/pause_hook
и может быть включено для запуска при выключении / перезагрузке с помощью следующей команды:Чтобы затем включить фактический хук, создайте файлы,
/etc/pause_hook.conf
содержащие строку:Процесс завершения работы / перезагрузки теперь должен приостанавливаться непосредственно перед
halt
вызовомreboot
сценария или , давая время для просмотра сообщений. Это также может быть легко отключено / повторно включено, комментируя / раскомментируя строку включения в/etc/pause_hook.conf
.dpkg
Таким образом, при обновлении также не будет конфликтных ситуаций.источник
Самым простым решением может быть попытка сделать видео вместо фотографии. Вы можете пошагово пройти его по кадрам позже.
источник
Просмотр журнала в режиме реального времени
Я обнаружил, что во время выключения обычно есть логотип Ubuntu и мигающие огни, которые отображаются вместо журнала процесса выключения. Если есть ошибки, то они вроде как показываются, но беспорядочно. Однако во время выключения, если я нажимаю клавишу Windows и
r
( Metar), я вижу, как происходит сбой системных служб, как они происходят. Итак, я знаю, что именно сломано. Не знаю, относится ли это сочетание клавиш к моей настройке Kubuntu или как; Я не добавил это .. Один из тех, кого я нашел случайно, как-то ...Просмотр логов после перезагрузки
После перезагрузки системы сообщения об ошибках должны быть сохранены в лог-файл. Какой файл журнала зависит от того, какая служба сломана / неправильно настроена. Соответствующий журнал почти наверняка будет в
/var/log/
(или его подкаталоге).ls
,less
,grep
Иfind
были единственными программами я , необходимой для поиска сообщений об ошибках в журналах ...Как только вы нашли ошибку и службу, которая ее вызвала, вам не нужно перезагружаться, чтобы протестировать новую конфигурацию; просто перезапустите сервис. Надеемся, что вы можете протестировать фиксированную конфигурацию с помощью команды:
sudo service <service name> restart
источник
После изучения того, как на
bootlogd
самом деле удается вести протоколирование, выясняется, что его можно убедить зарегистрировать как процесс выключения / перезагрузки, так и процесс запуска.bootlogd
запускается рано в процессе загрузки. Затем он делает некоторые магии сtty
иpts
устройствами для входа вывода на терминал он подключен. Затем он останавливается позже в процессе загрузки, по-видимому, до того, как он начнет регистрировать выходные данные пользователя, работающего сtty
.Если
bootlogd
во время процесса выключения / перезагрузки произойдет повторный запуск и он будет остановлен до того, как файловая система, содержащая журнал, будет размонтирована, будет запись большей части процесса выключения, доступная для чтения при следующей загрузке.bootlogd
удается запустить и остановить во время запуска, используя дваinit
сценария. Одним из них является нормальныйinit
скрипт, который запускает / останавливает процесс как обычно. Другой является «обратным»init
сценарием в том смысле, что при вызове с помощьюstart
он вызывает первый сценарий с остановкой. Это «обманывает»sysvinit
процесс, кажется, что он запускает две отдельные службы, когда он действительно запускается, и останавливает одну и ту же службу. Это необходимо, чтобы убедиться, что все происходит в правильном порядке.Для
bootlogd
запуска во время выключения требуется следующее:bootlogd
если вы еще этого не сделали.update-rc.d
.Вот мои изменения в виде
bash
сценария копирования / вставки (если вы хотите внести изменения вручную, заголовки LSB, которые я использовал, находятся в патче):Все сообщения, которые появляются до
bootlogd
остановки, будут сохранены в/var/log/boot
.bootlogd
удаляет escape-символы из текстового потока. Следующаяbash
команда ( ) отобразит журнал в цвете, как он отображается во время выключения:См. Этот вопрос для получения дополнительной информации об этом - /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.источник
Вам нужно отредактировать все файлы /etc/rc6.d/* и перенаправить их вывод в какой-нибудь файл, который вы сможете прочитать позже.
Это перенаправление, также скажет вам, какая программа
failed
иwhy
.Кроме того, вы должны изменить
start-stop-daemon
, удалив--quiet
параметр и добавив-v
параметр во все эти файлы.Если вы делаете это, убедитесь, что вы откатите все изменения, которые вы сделали. Резервное копирование существующих файлов перед внесением изменений будет хорошей идеей.
источник
/etc/init.d
(все/etc/rc?.d
ссылки здесь) ничего не даст. Вывод не является прямым, он осуществляется через функции/lib/lsb/init-functions
и другие файлы, которые он, в свою очередь , получает . Вы можете отредактировать их, хотя некоторые обновления могут затормозить изменения.start-stop-daemon
из OP PoV. Сейчас жду его ответаstart-stop-daemon
производит какой-либо вывод, по крайней мере, не нормально. Скрипты генерируют выходные данные ok / fail на основе своих возвращаемых результатов, используяlog_end_msg
. См/lib/lsb/init-functions.d/20-left-info-blocks
./var/log/messages
даст вам необходимые данные. если вам этого не достаточно, измените/etc/syslog.conf
для регистрации всех данных (я бы хотел включить ведение журнала ошибок ядра, иначе * kern), но ОБНОВИТЕ ЭТО ОБРАТНО после перезагрузки, иначе будет много места для журналов.источник
/etc/syslog.conf
. Есть толькоsysctl.conf sysctl.d/ systemd/
.Для моего ноутбука
sudo halt
будет делать программное отключение, а не оборудование. т.е. экран и другое оборудование остаются работающими. Последнее сообщение на экране будетВ этот момент я просто нажимаю кнопку питания и все выключается. Вы можете попробовать это. Вы также можете попробовать
sudo halt --verbose
источник
Как сказал Грэм, с ro или отключенной файловой системой, убитым klogd, нет никакой возможности записать такую информацию в файл. Решением может быть использование консоли (последовательного порта), определенной в bootargs. Просто подключите нуль-модемный кабель и другой компьютер (планшет или смартфон с соответствующим адаптером) и эмулятор терминала.
источник
Сообщения об ошибках (и другие) обычно скрыты по
plymouth
эстетическим причинам.Возможно, это поможет: если вы нажмете ESC во время выключения,
plymouth
отобразится графическая консоль. Это показывает вам полезные сообщения?Кроме того, вы мало что можете сделать, если машина действительно выйдет из строя, потому что она может быть не в состоянии записать файл журнала - будь он в буфере или
/var/log
уже перемонтирован только для чтения, в зависимости от того, когда происходит сбой. Вы могли бы взглянуть на эти файлы, выполнивls -ltr /var/log
и посмотрев, существует ли файл журнала, который соответствует вашей дате выключения (или новее).источник