Как найти из журналов что вызванное завершение работы системы?

Если Вы используете Bash или другую совместимую с POSIX оболочку:

for f in *.png; do
    mv -- "$f" "${f#image}"
done
116
21.03.2011, 21:12
10 ответов

Только корневые привилегированные программы могут корректно завершить работу системы. Таким образом, когда система закрывается нормальным способом, это - или пользователь с полномочиями пользователя root или acpi сценарий. В обоих случаях можно узнать путем проверки журналов. Завершение работы acpi может быть вызвано нажатием кнопки питания, перегревом или низким уровнем заряда (ноутбук). Я забыл третью причину, программное обеспечение UPS, когда источник питания перестал работать, который отправит предупреждение так или иначе.

Недавно у меня была система, которая начинала неоднократно выключаться неизящно, оказался, что она перегревалась, и mobo был настроен, чтобы просто выключиться рано. Система не имела шанса сохранить журналы, но к счастью контроль температуры системы показал, что это начинало увеличиваться непосредственно перед выключением.

Таким образом, если это будет нормальное завершение работы, то это будет зарегистрировано, если это будет проникновение... удача, и если это - завершение работы холода, Ваша лучшая возможность знать состоит в том, чтобы управлять и контролировать свою среду.

46
27.01.2020, 19:29

Попробуйте следующие команды:

Дисплейный список последних записей перезагрузки: last reboot | less

Дисплейный список последних записей завершения работы: last -x | less

или более точно: last -x | grep shutdown | less

Вы не будете знать, кто сделал это как бы то ни было. Если Вы захотите знать, кто сделал это, необходимо будет добавить немного кода, что означает, что Вы будете знать в следующий раз.

Я нашел этот ресурс онлайн. Это могло бы быть полезно для Вас:

Как узнать то, кто или что остановило мою систему

122
27.01.2020, 19:29
  • 1
    Ну, это не говорит мне, что вызвало завершение работы, только когда оно было сделано. Который я уже знаю, посмотрите мой вопрос. –  alex 05.04.2011, 09:22
  • 2
    более точно last -x shutdown –  Rahul Patil 10.06.2013, 08:49
  • 3
    Downvoted, поскольку он не делает отвечает на вопрос. –  toogley 16.10.2016, 16:54
  • 4
    Ссылка конкретно к, "Как я узнаю то, кто или что остановило мою систему (Старый Unix Sco)?" –  Wolfgang 20.06.2017, 22:14

Некоторые возможные файлы журнала для исследования: (найденный системой Ubuntu, но я надеялся бы, что они присутствуют в большинстве систем Linux/Unix),

/var/log/debug
/var/log/syslog (will be pretty full and may be harder to browse)
/var/log/user.log
/var/log/kern.log
/var/log/boot

Снова, эти файлы журнала присутствуют в системе Ubuntu, таким образом, имена файлов могут отличаться. tail команда является Вашим другом.

11
27.01.2020, 19:29

У меня есть просто неуклюжая идея, но возможно она работает на Вас: введите команду last и проверьте данные для входа для всех пользователей. затем, отфильтруйте th пользователей с разрешением, требуемым для halt это было зарегистрировано в тот момент. затем проверьте их .bash_history файл, чтобы видеть, ввели ли они останов или нет.

4
27.01.2020, 19:29

исказите завершение работы к сценарию
сценарий должен дать все параметры, и т.д. к исходному исполняемому файлу завершения работы
НО: сценарий должен зарегистрировать их это

0
27.01.2020, 19:29
  • 1
    Сценарий завершения работы уже делает это (last -x) –  forcefsck 03.04.2011, 00:33

Упростите использование last отображение записей завершения работы системы и уровня выполнения изменяются и фильтрация на shutdown и reboot:

last -x shutdown reboot
8
27.01.2020, 19:29
  • 1
    ndefontenay уже упомянул это. Спасибо за содействие, но прочитайте существующие ответы сначала. –  Gilles 'SO- stop being evil' 23.12.2013, 17:30
  • 2
    I, хотя мой ответ упростил ndefontenay один, но спасибо. –  jhvaras 23.12.2013, 18:15
  • 3
    @gilles я должен сказать это, тонко отличается, в cat foo | grep bar по сравнению с grep bar foo вид пути, кажется, что в последний раз способно к фильтрации себя. –  xenoterracide 26.12.2013, 20:41

Не полностью удовлетворяя

, я столкнулся с аналогичной потребностью в Debian 7.8 и заметил, что в основном в журнале нет чёткого и явного сообщения, что немного удивительно.

Grep through /var/log скажет время выключения машины, покажет правильное выключение демонов и т.д., но не первоначальную причину.

shutdown[25861]: shutting down for system halt

Другие решения, упомянутые ( последнее -x), не очень помогли.

Посмотрите, как это работает

Чтение /etc/acpi/powerbtn-acpi-support.sh, которое включает:

if [ -x /etc/acpi/powerbtn.sh ] ; then
    # Compatibility with old config script from acpid package
    /etc/acpi/powerbtn.sh
elif [ -x /etc/acpi/powerbtn.sh.dpkg-bak ] ; then
        # Compatibility with old config script from acpid package
    # which is still around because it was changed by the admin
        /etc/acpi/powerbtn.sh.dpkg-bak
else
    # Normal handling.
    /sbin/shutdown -h -P now "Power button pressed"
fi

Обратите внимание, что в качестве параметра команды shutdown указан явный текст. Я бы ожидал, что эта строка будет автоматически зарегистрирована программой shutdown.

Настройка для лучшего протоколирования

В любом случае, чтобы получить явное сообщение, я поместил текст ниже (в качестве корневого) во вновь созданную /etc/acpi/powerbtn. sh, сделанный исполняемым с помощью chmod a+x /etc/acpi/powerbtn.sh

#!/bin/sh
logger in /etc/acpi/powerbtn.sh, presumably "Power button pressed"
    /sbin/shutdown -h -P now "Power button pressed"

Сделав это таким образом, вы, вероятно, сделаете более длительное изменение, чем изменение /etc/acpi/powerbtn-acpi-support.sh. Последняя опция, вероятно, потеряет свой эффект при следующем обновлении пакета acpi-support-base.

Обратите внимание, что Ubuntu 14.04 отличается от Ubuntu (/etc/acpi/powerbtn.sh уже существует с содержанием, отличным от пакета acpid). Кроме того, Debian 8, вероятно, делает это по-другому. Не стесняйтесь предлагать варианты.

Прибыль!

А теперь, когда нажата кнопка включения, в /var/log/messages, /var/log/syslog и /var/log/user.log:

logger: in /etc/acpi/powerbtn.sh, presumably Power button pressed

Теперь это явное сообщение в лог-файле.

8
27.01.2020, 19:29

В моем случае у меня была проблема с перегревом и я нашел журнал в /var/log/syslog, выполнив 'grep shut *' в папке /var/log.

Ошибка была записана так:

Feb 23 15:59:49 luca-LIFEBOOK-A530 kernel: [24746.497174] thermal thermal_zone0: critical temperature reached(99 C),shutting down
1
27.01.2020, 19:29

Вы должны изучить 2 вещи:

  1. Вывод команды last -x
  2. Файлы журнала в /var/log/

Используйте эти 2 команды и продолжайте читать для получения дополнительной информации.

last -x | head | tac

grep -iv ': starting\|kernel: .*: Power Button\|watching system buttons\|Stopped Cleaning Up\|Started Crash recovery kernel' \
  /var/log/messages /var/log/syslog /var/log/apcupsd* \
  | grep -iw 'recover[a-z]*\|power[a-z]*\|shut[a-z ]*down\|rsyslogd\|ups'

1) Что касается вывода команды last -x

Выполните эту команду* и сравните вывод с примерами ниже:

last -x | head | tac

Примеры нормального выключения

Нормальное выключение и включение выглядит следующим образом (обратите внимание, что у вас есть событие выключения, а затем событие загрузки системы):

runlevel (to lvl 0)   2.6.32- Sat Mar 17 08:48 - 08:51  (00:02) 
shutdown system down  ... <-- first the system shuts down   
reboot   system boot  ... <-- afterwards the system boots
runlevel (to lvl 3)       

В некоторых случаях вы можете увидеть следующее (обратите внимание, что нет строки о выключении, но система была на уровне выполнения 0, что является "состоянием остановки"):

runlevel (to lvl 0)   ... <-- first the system shuts down (init level 0)
reboot   system boot  ... <-- afterwards the system boots
runlevel (to lvl 2)   2.6.24-... Fri Aug 10 15:58 - 15:32 (2+23:34)   

Примеры неожиданного выключения

Неожиданное выключение из-за потери питания выглядит следующим образом (обратите внимание, что у вас есть событие загрузки системы без предшествующего события выключения системы):

runlevel (to lvl 3)   ... <-- the system was running since this momemnt
reboot   system boot  ... <-- then we've a boot WITHOUT a prior shutdown
runlevel (to lvl 3)   3.10.0-693.21.1. Sun Jun 17 15:40 - 09:51  (18:11)    

2) Что касается журналов в /var/log/

Команда bash для фильтрации наиболее интересных сообщений журнала выглядит следующим образом:

grep -iv ': starting\|kernel: .*: Power Button\|watching system buttons\|Stopped Cleaning Up\|Started Crash recovery kernel' \
  /var/log/messages /var/log/syslog /var/log/apcupsd* \
  | grep -iw 'recover[a-z]*\|power[a-z]*\|shut[a-z ]*down\|rsyslogd\|ups'

Когда происходит неожиданное выключение питания или аппаратный сбой, файловые системы не будут правильно размонтированы, поэтому при следующей загрузке вы можете получить такие журналы:

EXT4-fs ... INFO: recovery required ... 
Starting XFS recovery filesystem ...
systemd-fsck: ... recovering journal
systemd-journald: File /var/log/journal/.../system.journal corrupted or uncleanly shut down, renaming and replacing.

Когда система выключается, потому что пользователь нажал кнопку питания, вы получите такие журналы:

systemd-logind: Power key pressed.
systemd-logind: Powering Off...
systemd-logind: System is powering down.

Только когда система выключается упорядоченно, вы получите такие журналы:

rsyslogd: ... exiting on signal 15

Когда система выключается из-за перегрева, вы получаете такие журналы:

critical temperature reached...,shutting down

Если у вас есть UPS и запущен демон для мониторинга питания и выключения, вы должны проверить его журналы (NUT ведет журналы в /var/log/messages, но apcupsd ведет журналы в /var/log/apcupsd*)


Примечания

*: Вот описание last из его man-страницы:

last [...] prints information about connect times of users. 
Records are printed from most recent to least recent.  
[...]
The special users reboot and shutdown log in when the system reboots
or (surprise) shuts down. 

Мы используем head для хранения последних 10 событий и используем tac для инвертирования упорядочивания, чтобы не запутаться в том, что last печатает от самого последнего к самому последнему событию.

22
27.01.2020, 19:29

Просто укажите это на моей виртуальной машине KVM (, где я задавался вопросом, приводит ли перезагрузка хоста к чистому завершению работы гостей ). Я нашел то, что мне нужно, в/var/log/auth.log(в дополнение к last -x shutdown, показывающему то же самое ). Там появились эти строки:

Sep  3 23:56:31 Web systemd-logind[531]: Power key pressed.
Sep  3 23:56:31 Web systemd-logind[531]: Powering Off...
Sep  3 23:56:31 Web systemd-logind[531]: System is powering down.
Sep  3 23:55:45 Web systemd-logind[591]: New seat seat0.
Sep  3 23:55:45 Web systemd-logind[591]: Watching system buttons on /dev/input/event0 (Power Button)
Sep  3 23:55:54 Web sshd[805]: Server listening on 0.0.0.0 port 22.
Sep  3 23:55:54 Web sshd[805]: Server listening on :: port 22.

last -xпоказывает эти строки, обратите внимание, что они печатаются в самых -последних -первых порядке (т.е. сначала читайте последнюю строку, а затем поднимайтесь ), но из-за сброса часов (23 :56 перед загрузкой, 23 :55 после )также видно в предыдущих строках, порядок кажется немного сбивающим с толку:

runlevel (to lvl 2)   3.13.0-129-gener Sun Sep  3 23:55 - 22:04  (22:08)    
reboot   system boot  3.13.0-129-gener Sun Sep  3 23:55 - 22:04  (22:08)    
shutdown system down  3.13.0-123-gener Sun Sep  3 23:56 - 23:55  (00:00)    
runlevel (to lvl 0)   3.13.0-123-gener Sun Sep  3 23:56 - 23:56  (00:00)

Со своей стороны, проверяя правильность завершения работы гостей при загрузке хоста, я также мог бы просто войти в (ssh )одного из гостей и остаться там, когда я загружаю хост, получая эти строки в терминал:

root@Web:~#
Broadcast message from root@Web
        (unknown) at 22:25...

The system is going down for power off NOW!
Connection to web closed by remote host.
Connection to web closed.
1
27.01.2020, 19:29

Теги

Похожие вопросы