Pourquoi systemd se bloque-t-il pendant le redémarrage?

13

1 fois sur 10, systemd se bloque pendant le redémarrage. Je ne comprends pas la raison. Que / où dois-je regarder pour résoudre le problème? J'utilise systemd v196 et je ne peux pas le mettre à niveau vers la version> = 198 car ce dernier nécessite un noyau récent (avec prise en charge des cgroups), qui ne peut pas être mis à jour par les exigences du client. Je me demande s'il existe un moyen raisonnable de découvrir la raison de ce comportement et de faire redémarrer le système inconditionnellement.

Notez que ce lien n'aide pas: http://freedesktop.org/wiki/Software/systemd/Debugging/#index2h1

Comme vous pouvez le lire ici:

L'arrêt ne se termine jamais

Si le redémarrage normal ou la mise hors tension ne se termine jamais, même après avoir attendu quelques minutes, la méthode ci-dessus pour créer le journal d'arrêt n'aidera pas et le journal doit être obtenu à l'aide d'autres méthodes. Deux options utiles pour déboguer les problèmes de démarrage peuvent également être utilisées pour les problèmes d'arrêt:

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

J'utilise la console série, et pour une raison quelconque, je peux même me connecter, car l'interface eth est en place ou a été activée (après une déconnexion lors des étapes de redémarrage).

Je ne vois pas la raison.

# 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

Notez le swap.target. Il est là, mais nous n'utilisons pas du tout de partitions d'échange. J'ai essayé de masquer le swap, mais le problème de blocage des reamins. La dernière ligne de la console est:

[OK] Stopped target shutdown.

EDIT: Comme je l'ai dit, je peux me reconnecter via ssh sur eth.

Maintenant, je vais vous montrer deux journaux. Le premier journal se produit lorsque le redémarrage / shutdwon se bloque, tandis que le deuxième journal se produit lorsque le redémarrage réussit:

Accrochez le cas, la sortie est toujours comme ça (journal complet):

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

Redémarrage 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.

MISE À JOUR:

Après quelques investigations et débogage, j'ai découvert la raison de l'interruption de l'arrêt, bien que je ne puisse toujours pas le résoudre. Ce qui se passe, c'est que, pour certaines raisons, l'un des services personnalisés est démarré avant la fin de l'arrêt, ce qui entraîne le blocage de la procédure d'arrêt. C'est un cas de blocage. Un autre type de blocage se produit lorsque l'arrêt n'est pas interrompu mais s'arrête à un moment donné. Pour ces raisons, avant de résoudre tous les conflits et autres blocages possibles un par un, je souhaite activer inconditionnellement le chien de garde matériel. Pour ce faire via systemd, j'ai activé et testé, séparément ou ensemble, le RuntimeWatchdogSec et ShutdownWatchdogSec. Malheureusement, ils n'ont pas aidé. En regardant le code source,

Je suis coincé. Ce que je vous demande, c'est de trouver un moyen pour: 1. activer le chien de garde sans condition au moins à partir du point où l'arrêt commence 2. détecter et résoudre facilement tous les conflits

La première solution est préférée.

Martin
la source
Est-il en train de descendre? Pouvez-vous partager avec nous quels services sont activés sur le système? Des sur mesure? Comment avez-vous conclu que systemd se bloque?
MattBianco
@MattBianco J'ai édité la question. Il y a plus d'informations.
Martin
Pourquoi ne vois-je pas de lignes identiques entre les premier et deuxième journaux? Je serais en mesure d'offrir plus d'aide si je pouvais voir où ils commencent à différer.
BenjiWiebe
@BenjiWiebe vous avez raison. Je vais à nouveau modifier la question
Martin
essayez d'utiliser journalctl en tant que root et recherchez les délais d'attente, les échecs et les erreurs de dépendance dans le journal systemd.
harrymc

Réponses:

5

J'ose proposer une solution: essayez d'ajouter

  Before=basic.target

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

Je suis frappé par une bizarrerie, dans vos journaux, qui me rappelle un accident que j'ai lu il y a quelque temps, dans les forums Arch Linux : ce système se bloquerait au redémarrage. La solution a été proposée comme ci-dessus, au motif que le blocage serait provoqué par un service essayant de parler au d-bus après son arrêt:

Ainsi, en le commandant avant le basic.target, il démarre non seulement avant que l'objectif de base ne soit atteint, mais garantit également qu'il reste en place jusqu'à ce que le basic.target soit abaissé pendant l'arrêt.

Dans votre journal malsain , nous voyons en fait que le système de base n'est pas arrêté, alors qu'il est correctement arrêté dans le journal sain .

Si cela ne fonctionne pas, et considérant que vous ne pouvez pas mettre à niveau, avez-vous envisagé une rétrogradation?

MariusMatutiae
la source
1
Merci, je vais essayer votre solution. J'ai envisagé de remplacer le bon vieux SysV, car systemd semble être buggé par conception.
Martin
J'obtiens ceci de systemd au démarrage après avoir appliqué ce changement: Cycle de commande trouvé, ignorez le bus de messages du système D-Bus. Une idée?
Martin
@Martin 1: avez-vous / et / usr sur des partitions séparées? 2) avez-vous beaucoup de choses dans /etc/init.d? Ou dans /etc/rc.d?
MariusMatutiae
1
Cela fonctionne très bien sur Ubuntu 16.04, le fichier était en /usr/lib/systemd/user/dbus.servicevertu de la [Unit]section
Anwar
3

shutdown.targetest en conflit avec toutes les autres unités par défaut, afin de les arrêter automatiquement au démarrage du processus d'arrêt. Cela fonctionne aussi dans l'autre sens - si une autre unité démarre, elle provoque shutdown.targetl'arrêt. Le problème est donc que quelque chose fait démarrer quelque chose pendant l'arrêt, ce qui annule le processus d'arrêt.

Cela aurait dû être corrigé dans systemd v198, ce qui rend la tâche d'arrêt "irremplaçable".

user1686
la source
Je ne peux pas mettre à niveau :(
Martin
Je dois découvrir les conflits et les corriger
Martin
1

Peut-être que le swap est toujours actif lorsqu'il atteint "Arrêt cible"; Ma solution était de forcer la désactivation du swap avant le redémarrage:

swapoff -a
swapoff /dev/md6

après cela, le redémarrage s'est bien passé pour moi sans aucune pause.

Stéphane Peters
la source