Почему systemd зависает во время перезагрузки?

1 из 10 раз, systemd зависает во время перезагрузки. Я не понимаю причину. Что / где я должен смотреть, чтобы решить эту проблему? Я использую systemd v196 и не могу обновить его до версии >=198, потому что для последнего требуется последнее ядро (с поддержкой контрольных групп), которое не может быть обновлено по требованиям заказчика. Интересно, есть ли разумный способ обнаружить причину такого поведения и заставить systemd перезагрузить систему безоговорочно.

обратите внимание, что эта ссылка не не поможет: http://freedesktop.org/wiki/Software/systemd/Debugging/#index2h1

как вы можете прочитать здесь:

Завершение Работы Никогда Не Заканчивается

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

use a serial console
use a debug shell - not only is it available from early boot, it also stays active until late shutdown.

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

Я не вижу смысла.

# cat /etc/systemd/system/
basic.target.wants/                          getty.target.wants/                          multi-user.target.wants/                     sysinit.target.wants/                        
dbus-org.freedesktop.NetworkManager.service  local-fs-pre.target.wants/                   sockets.target.wants/                        syslog.service                               
display-manager.service                      local-fs.target.wants/                       swap.target

обратите внимание на своп.цель. Он есть, но мы вообще не используем разделы подкачки. Я попытался замаскировать своп, но проблема зависания. Последняя строка в консоли:

[OK] Stopped target shutdown.

EDIT: как я сказал, Я могу повторно войти через ssh через eth.

теперь я покажу вам два журнала. Первый журнал происходит при перезагрузке/shutdwon зависает, а второй лог после перезагрузки удается:

повесить случае, выход всегда так (полный журнал):

[  OK  ] Stopped Network Time Service (one-shot ntpdate mode).
         Stopping Modem and VPN connections autoconnect...
         Stopping Login Service...
         Stopping LSB: Avahi mDNS/DNS-SD Daemon...
[  OK  ] Stopped Monitoring free system resources.
[  OK  ] Stopped Monitoring dropbear socket.
[  OK  ] Stopped Login Service.
[  OK  ] Stopped Modem and VPN c[  OK  ] Stopped Getty on tty1.
[  OK  ] Stopped Serial Getty on ttyO0.
[  OK  ] Unmounted /var/lib/opkg.
[  OK  ] Stopped Network Manager.
[  OK  ] Stopped LSB: Avahi mDNS/DNS-SD Daemon.
         Stopping D-Bus System Message Bus...
[  OK  ] Stopped target Remote File Systems.
[  OK  ] Stopped Suspend manager.
         Stopping X Server...
[  OK  ] Stopped X Server.
         Stopping System Logging Service...
[  OK  ] Stopped System Logging Service.
[   77.580000] g_ether gadget: using random self ethernet address
[   77.580000] g_ether gadget: using random host ethernet address
[   77.590000] usb0: MAC 6e:0d:de:b0:33:4f
[   77.590000] usb0: HOST MAC 62:7a:81:02:f3:ff
[   77.600000] g_ether gadget: Ethernet Gadget, version: Memorial Day 2008
[   77.600000] g_ether gadget: g_ether ready
[   77.610000] musb-hdrc musb-hdrc.0: MUSB HDRC host driver
[   77.610000] musb-hdrc musb-hdrc.0: new USB bus registered, assigned bus number 2
[   77.620000] usb usb2: New USB device found, idVendor=1d6b, idProduct=0002
[   77.630000] usb usb2: New USB device strings: Mfr=3, Product=2, SerialNumber=1
[   77.640000] usb usb2: Product: MUSB HDRC host driver
[   77.640000] usb usb2: Manufacturer: Linux 2.6.37 musb-hcd
[   77.650000] usb usb2: SerialNumber: musb-hdrc.0
[   77.650000] hub 2-0:1.0: USB hub found
[   77.660000] hub 2-0:1.0: 1 port detected
[   77.690000] ADDRCONF(NETDEV_UP): usb0: link is not ready
[  OK  ] Stopped target Reboot.
[  OK  ] Stopped Reboot.
[  OK  ] Stopped target Unmount All Filesystems.
[  OK  ] Stopped target Shutdown.
[   78.330000] <46>systemd-journald[328]: Received SIGUSR1
<hang>

обычную перезагрузку:

         Unmounting /var/lib/opkg...
[  OK  ] Stopped target Network.
         Stopping SSH Per-Connection Server...
[  OK  ] Stopped target Graphical Interface.
[  OK  ] Stopped target Multi-User.
         Stopping Monitoring free system resources...
         Stopping Monitoring dropbear socket...
         Stopping Network Time Service (one-shot ntpdate mode)...
[  OK  ] Stopped Network Time Service (one-shot ntpdate mode).
         Stopping Modem and VPN connections autoconnect...
         Stopping Login Service...
         Stopping LSB: Avahi mDNS/DNS-SD Daemon...
[  OK  ] Stopped Monitoring free system resources.
[  OK  ] Stopped Monitoring dropbear socket.
[  OK  ] Stopped Login Service.
[  OK  ] Unmounted /var/lib/opkg.
         Stopping Network Manager...
[  OK  ] Stopped Getty on tty1.
[  OK  ] Stopped Network Manager.
[  OK  ] Stopped Serial Getty on ttyO0.
[  OK  ] Stopped Suspend manager.
[  OK  ] Stopped LSB: Avahi mDNS/DNS-SD Daemon.
         Stopping D-Bus System Message Bus...
         Stopping X Server...
         Stopping Permit User Sessions...
[  OK  ] Stopped Permit User Sessions.
[  OK  ] Stopped target Remote File Systems.
[  OK  ] Stopped X Server.
[  OK  ] Stopped D-Bus System Message Bus.
         Stopping System Logging Service...
[  OK  ] Stopped System Logging Service.
[  OK  ] Stopped target Basic System.
[  OK  ] Stopped target Sockets.
[  OK  ] Closed dropbear.socket.
[  OK  ] Closed D-Bus System Message Bus Socket.
[  OK  ] Stopped target System Initialization.
         Stopping Import configuration from SD card...
[  OK  ] Stopped Import configuration from SD card.
         Stopping Load Kernel Modules...
         Stopping Apply Kernel Variables...
[  OK  ] Stopped Apply Kernel Variables.
[  OK  ] Stopped target Local File Systems.
         Unmounting /var...
         Unmounting /tmp...
[  OK  ] Closed Syslog Socket.
[  OK  ] Failed unmounting /var.
[  OK  ] Unmounted /tmp.
[  OK  ] Stopped Load Kernel Modules.
[  OK  ] Reached target Unmount All Filesystems.
[  OK  ] Stopped target Local File Systems (Pre).
         Stopping Remount Root and Kernel File Systems...
[  OK  ] Stopped Remount Root and Kernel File Systems.
[  OK  ] Reached target Shutdown.
[   52.340000] omap_wdt: Unexpected close, not stopping!
Sending SIGTERM to remaining processes...
[   52.490000] <46>systemd-journald[335]: Received SIGTERM
Sending SIGKILL to remaining processes...
Unmounting file systems.
Unmounting /sys/fs/fuse/connections.
Unmounting /var.
All filesystems unmounted.
Deactivating swaps.
All swaps deactivated.

обновление:

после некоторых исследований и отладки я обнаружил причину прерывания работы, хотя я все еще не могу ее решить. Что происходит, что для по некоторым причинам одна из пользовательских служб запускается до завершения завершения работы, что приводит к зависанию процедуры завершения работы. Это один из случаев повешения. Другой вид зависание, когда выключение не прерывается, но он останавливается в какой-то момент. По этой причине, прежде чем решать все конфликты и другие возможные зависания по одному, я хочу безоговорочно активировать аппаратный сторожевой таймер. Чтобы сделать это через systemd, я включил и протестировал, отдельно или вместе, RuntimeWatchdogSec и ShutdownWatchdogSec. К сожалению, они не помогли. Глядя на исходный код, кажется, systemd входит в цикл, где он все еще ждет, пока все fs будут размонтированы и другие виды очистки будут выполнены, прежде чем позволить сторожевой пес действительно быть эффективным (не сохраняя его живым).

Я застрял. То, что я прошу вас, чтобы найти способ либо:
1. у сторожевого пса включен безусловно по крайней мере, начиная с точки, где остановка начинается
2. обнаружен и решить все конфликты простым способом

предпочтительно первое решение.

9
задан Martin
05.11.2022 4:51 Количество просмотров материала 3685
Распечатать страницу

3 ответа

shutdown.target конфликты со всеми другими блоками по умолчанию, чтобы автоматически остановить их при запуске процесса выключения. Это работает и наоборот - если запускается другой блок, он вызывает shutdown.target должен быть остановлен. Так что проблема в том, что что-то вызывает что-то, чтобы начать во время выключения, который переопределяет процесс завершения работы.

Это должно быть исправлено в systemd v198, что делает задание выключения "незаменимым".

3
отвечен grawity 2022-11-06 12:39

рискну предложить решение: попробуйте добавить

  Before=basic.target

в /usr/lib/systemd/system / dbus.услуга.

меня поразила странность в ваших журналах, которая напоминает мне случайность, о которой я читал некоторое время назад,на форумах Arch Linux: эта система будет зависать при перезагрузке. Решение было предложено, как указано выше, на том основании, что повесить будет вызвано какой-то службы пытается поговорить с D-bus после того, как он был остановлен:

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

в своем нездоровое log, мы видим на самом деле, что базовая система не остановлена, в то время как она правильно остановлена в здоровый log.

Если это не сработает, и учитывая, что вы не можете обновить, вы рассмотрели понизить?

3
отвечен MariusMatutiae 2022-11-06 14:56

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

swapoff -a
swapoff /dev/md6

после этого перезагрузка прошла нормально для меня без паузы.

1
отвечен Stéphane Peters 2022-11-06 17:13

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх