Як прочитати згодом повідомлення про закриття?


18

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

Отже, як прочитати повідомлення журналу та спробувати вирішити проблему?


Погляньте на цю відповідь на askubuntu. Це може допомогти вам у вирішенні вашої проблеми.
solde9

все відновилося в /var/log/syslogі /var/log/messages, Тому вам потрібно прочитати їх і усунути неполадки. Ви можете використовувати io redirectionз error redirectionпри використанніshutdown command
Перську затоку

Відповіді:


14

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

Найпростіший спосіб перегляду повідомлень - це редагування /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 тощо). Ви можете прочитати повідомлення, надруковані на екрані. Якщо в екрані є більше одного тексту, ви можете побачити прокрутку термінала, натиснувши його Shift+PgUp. Якщо цього все-таки недостатньо, є способи збільшити розмір буфера прокрутки (можливо, інше питання).

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

reboot -d -f -i

Знову просто вставте наступне у новому рядку вище:

read -p "Press enter to reboot" reply

Зауважте також, що ці файли перелічені як конфілі для 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час оновлень також не буде конфліктних конфліктів.


Досить приємне рішення, особливо сценарій init.
Михайло Морфіков

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. Скопіюйте два сценарії 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/logзнаходиться на коренях. Якщо ні, залежності потрібно переробити так, щоб umountfsце було зроблено після того, як bootlogdбуде припинено. Або ж увійдіть до файлу на коренях.


1

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

Це перенаправлення також підкаже, яку програму failedта why.

Крім того, ви повинні змінити start-stop-daemon, видаливши --quietпараметр і додавши -vпараметр у всі ці файли.

Якщо ви це робите, то переконайтеся, що ви відкажете всі зміни, які ви зробили. Резервне копіювання наявних файлів перед внесенням змін буде хорошою ідеєю.


ДОБРЕ. Це займе багато роботи у мене. Я постараюсь. Спасибі.
Сигур

Дайте мені знати результат тоді
SHW

Редагування скриптів у /etc/init.d(все, що /etc/rc?.dпосилається тут) не призведе до нічого. Вихід не є прямим, це за допомогою функцій в /lib/lsb/init-functionsінших файлах, які в свою чергу є джерелами. Ви можете їх відредагувати, хоча деякі оновлення можуть зменшити зміни.
Graeme

Єдина функція або двійкові дані, які мають відношення, - це start-stop-daemonвід OP PoV. Зараз чекаю на його відповідь
SHW

@SHW Ні, подивіться на сценарії. Більшість результатів надходить з інших частин сценарію. Я не думаю, що start-stop-daemonдає якийсь результат, принаймні, як правило. Сценарії генерують нормальний / відмовний вихід на основі його повернення, використовуючи log_end_msg. Див /lib/lsb/init-functions.d/20-left-info-blocks.
Graeme

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 чи dismount, вбитий klogd, немає можливості записувати таку інформацію у файл. Рішенням може бути використання консолі (послідовного порту), визначеної у завантажувальних марках. Просто підключіть кабель нульового модему та інший ПК (планшет чи смартфон із відповідним адаптером) та емулятор терміналу.


-1

Повідомлення про помилки (та інші) зазвичай приховуються з plymouthестетичних причин.

Можливо, це допомагає: Якщо під час відключення натиснути ESC, plymouthвідобразиться графічна консоль. Це показує вам корисні повідомлення?

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.