web-dev-qa-db-fra.com

Pourquoi rester bloqué lors du redémarrage?

1 fois sur 10, systemd se bloque lors du redémarrage. Je ne comprends pas la raison. Quoi/Où devrais-je regarder pour résoudre le problème? J'utilise systemd v196 et je ne peux pas la mettre à niveau vers la version> = 198 car cette dernière nécessite un noyau récent (avec prise en charge de 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 d’obliger le système à redémarrer le système sans condition.

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 une attente de quelques minutes, la méthode ci-dessus pour créer le journal d'arrêt ne vous aidera pas et le journal doit être obtenu à l'aide d'autres méthodes. Deux options utiles pour le débogage des problèmes d’amorçage 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 survenue au cours 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. C'est là, mais nous n'utilisons pas du tout de partitions d'échange. J'ai essayé de masquer l'échange, mais le problème de blocage 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, alors que le second journal est celui du redémarrage réussi:

Accrocher 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.

METTRE À JOUR:

Après quelques investigations et un débogage, j'ai découvert la raison de l'interruption d'arrêt, bien que je ne puisse toujours pas le résoudre. En effet, pour certaines raisons, l'un des services personnalisés est démarré avant la fin de l'arrêt, ce qui bloque la procédure d'arrêt. C'est un cas de blocage. Un autre type de blocage est lorsque l'arrêt n'est pas interrompu mais qu'il s'arrête à un moment donné. Pour cette raison, avant de résoudre tous les conflits et autres problèmes éventuels, 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, RuntimeWatchdogSec et ShutdownWatchdogSec. Malheureusement, ils n'ont pas aidé. En regardant le code source, il semble que systemd entre dans une boucle où il attend toujours que tous les fs soient démontés et que tout autre type de nettoyage soit effectué avant de laisser le chien de garde réellement efficace (sans le garder en vie).

Je suis coincé. Ce que je vous demande, c’est de trouver un moyen soit: 1. de laisser le chien de garde activé inconditionnellement au moins à partir du point où l’arrêt commence 2. de détecter et de résoudre tous les conflits en un moyen facile

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

12
Martin

Je me permets de suggérer 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, sur les forums Arch Linux : le système s'arrêterait au redémarrage. La solution a été proposée comme ci-dessus, au motif que le blocage serait causé par un service essayant de parler à d-bus après son arrêt:

Donc, en le commandant avant le basic.target, il commence non seulement avant que la cible de base ne soit atteinte, mais garantit également qu'il reste actif jusqu'à ce que le basic.target soit abaissé lors de 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é de rétrograder?

4
MariusMatutiae

shutdown.target est 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 également dans l'autre sens - si une autre unité démarre, cela provoque l'arrêt de shutdown.target. Le problème est donc que quelque chose provoque le démarrage de 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 le travail d'arrêt "irremplaçable".

3
grawity

Peut-être que le swap est toujours actif lorsque "Target shutdown" est atteint; Ma solution était de forcer la désactivation de l'échange avant le redémarrage:

swapoff -a
swapoff /dev/md6

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

1