Por que o systemd trava durante a reinicialização?

13

1 de 10 vezes, o systemd trava durante a reinicialização. Eu não entendo o motivo. O que / onde devo olhar para corrigir o problema? Estou usando o systemd v196 e não posso atualizá-lo para a versão> = 198 porque este requer um kernel recente (com suporte para cgroups), que não pode ser atualizado pelos requisitos do cliente. Gostaria de saber se existe uma maneira razoável de descobrir o motivo desse comportamento e fazer com que o systemd o reinicie incondicionalmente.

Observe que este link não ajuda: http://freedesktop.org/wiki/Software/systemd/Debugging/#index2h1

Como você pode ler lá:

O encerramento nunca termina

Se a reinicialização normal ou o desligamento automático nunca terminarem, mesmo depois de aguardar alguns minutos, o método acima para criar o log de desligamento não ajudará e o log deverá ser obtido usando outros métodos. Duas opções úteis para depurar problemas de inicialização podem ser usadas também para problemas de desligamento:

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

Estou usando o console serial e, por algum motivo, posso até fazer login, pois a interface eth foi ativada ou ativada (após uma desconexão durante as etapas de reinicialização).

Não vejo o motivo.

# 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

Observe o swap.target. Está lá, mas não usamos partições de swap. Tentei mascarar a troca, mas o problema do travamento continua. A última linha no console é:

[OK] Stopped target shutdown.

EDIT: Como eu disse, eu posso entrar novamente via ssh over eth.

Agora vou mostrar dois logs. O primeiro log ocorre quando a reinicialização / shutdwon trava, enquanto o segundo log é quando a reinicialização é bem-sucedida:

Pendure caso, a saída é sempre assim (log completo):

[  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>

Reinicialização normal:

         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.

ATUALIZAR:

Após algumas investigações e depuração, descobri o motivo da interrupção do desligamento, embora ainda não consiga resolvê-lo. O que acontece é que, por alguns motivos, um dos serviços personalizados é iniciado antes da conclusão do encerramento, o que interrompe o procedimento de encerramento. Esse é um caso de queda. Outro tipo de travamento ocorre quando o desligamento não é interrompido, mas pára em algum momento. Por esse motivo, antes de resolver todos os conflitos e outras possíveis interrupções, uma de cada vez, desejo ativar incondicionalmente o watchdog de hardware. Para fazer isso via systemd, habilitei e testei, separadamente ou em conjunto, o RuntimeWatchdogSec e o ShutdownWatchdogSec. Infelizmente, eles não ajudaram. Observando o código fonte,

Estou preso. O que eu peço é que você encontre uma maneira de: 1. ativar o watchdog incondicionalmente, pelo menos a partir do ponto em que o desligamento começa; 2. detectar e resolver todos os conflitos de maneira fácil;

A primeira solução é preferida.

Martin
fonte
É no caminho que ele trava? Você pode compartilhar conosco quais serviços estão ativados no sistema? Algum feito sob medida? Como você concluiu que o systemd trava?
Matt Bianco
@MattBianco Eu editei a pergunta. Há mais informações.
Martin
Por que não vejo nenhuma linha igual entre o primeiro e o segundo logs? Eu seria capaz de oferecer mais ajuda se pudesse ver onde eles começam a diferir.
BenjiWiebe
@BenjiWiebe você está certo. Eu editarei a pergunta novamente #
Martin
tente usar o journalctl como raiz e procure tempos limite, falhas e falhas de dependência no diário systemd.
harrymc

Respostas:

5

Atrevo-me a sugerir uma solução: tente adicionar

  Before=basic.target

para /usr/lib/systemd/system/dbus.service.

Estou impressionado com uma estranheza, nos seus registros, que me lembra um acidente que li há algum tempo atrás, nos fóruns do Arch Linux : esse sistema travava na reinicialização. A solução foi oferecida como acima, com o argumento de que o travamento seria causado por algum serviço que tentasse conversar com o d-bus depois de interrompido:

Portanto, ao solicitá-lo antes do basic.target, ele não apenas inicia antes que o destino básico seja atingido, mas também garante que ele permaneça por aí até depois que o basic.target for desativado durante o desligamento.

No seu registro não íntegro , vemos que o Sistema Básico não está parado, enquanto está corretamente parado no registro íntegro .

Isso não deve funcionar e, considerando que você não pode atualizar, você considerou um downgrade?

MariusMatutiae
fonte
1
Obrigado, tentarei sua solução. Eu considerei uma substituição para o bom e velho SysV, pois o systemd parece estar com problemas de design.
Martin Martin
Eu recebo isso do systemd na inicialização depois de aplicar essa alteração: Ciclo de pedidos encontrado, pule o barramento de mensagens do sistema D-Bus. Qualquer ideia?
Martin Martin
@ Martin 1: você tem / e / usr em partições separadas? 2) você tem muitas coisas no /etc/init.d? Ou em /etc/rc.d?
MariusMatutiae
1
isso funciona muito bem no Ubuntu 16.04, o arquivo estava em /usr/lib/systemd/user/dbus.servicesob [Unit]a seção
Anwar
3

shutdown.targetentra em conflito com todas as outras unidades por padrão, para interrompê-las automaticamente quando o processo de desligamento é iniciado. Isso também funciona da outra maneira - se outra unidade iniciar, ela shutdown.targetserá interrompida. Portanto, o problema é que algo faz com que algo inicie durante o desligamento, o que substitui o processo de desligamento.

Isso deveria ter sido corrigido no systemd v198, o que torna o trabalho de desligamento "insubstituível".

user1686
fonte
Não consigo atualizar :(
Martin
Devo descobrir os conflits e corrigi-los
Martin
1

Talvez a troca ainda esteja ativa ao atingir "Destino desligado"; Minha solução foi forçar a desativação da troca antes da reinicialização:

swapoff -a
swapoff /dev/md6

depois disso, a reinicialização correu bem para mim sem nenhuma pausa.

Stéphane Peters
fonte