Comment redémarrer automatiquement en cas de "kernel panic" ?
Il est possible de redémarrer un système automatiquement en cas de « kernel panic » en utilisant les fonctionnalités du noyau.
Activation au chargement du noyau
L’option « panic=X », passée au noyau lors de son chargement, fixe à « X » secondes le temps avant redémarrage de la machine en cas de « kernel panic ».
La modification est effectuée dans la configuration du gestionnaire de démarrage, en général GRUB.
Sous Debian et ses dérivées (Ubuntu, …), ajoutez cette option à « GRUB_CMDLINE_LINUX_DEFAULT » de « /etc/default/grub » avant de régénérer « grub.cfg » via « update-grub2 » :
17:11:22 mafalda ~ # grep GRUB_CMDLINE_LINUX_DEFAULT /etc/default/grub GRUB_CMDLINE_LINUX_DEFAULT="panic=10 quiet" 17:11:26 mafalda ~ # update-grub2 Generating grub.cfg ... Found linux image: /boot/vmlinuz-2.6.39-2-amd64 Found initrd image: /boot/initrd.img-2.6.39-2-amd64 done 17:13:43 mafalda ~ # cat /boot/grub/grub.cfg ... linux /boot/vmlinuz-2.6.39-2-amd64 root=UUID=ab167e7b-343a-4031-a2b1-673c8ee6dbe5 ro panic=10 quiet ... |
Sous Gentoo Linux, éditez « /boot/grub/menu.lst » pour y ajouter l’option « panic=X » :
srv ~ # cat /boot/grub/menu.lst ... title Gentoo Linux (Kernel x86_64 2.6.29.6-vs2.3.0.36.14) root (hd0,0) kernel /kernel-x86_64-... root=/dev/ram0 real_root=/dev/sda2 panic=10 initrd /initramfs-2.6.29.6-vs2.3.0.36.14 ... |
Sous Fedora, CentOS et autres « Red Hat like », la modification est effectuée dans « /etc/grub.conf » :
centos ~ # cat /etc/grub.conf ... title CentOS (2.6.32-71.el6.x86_64) root (hd0,0) kernel /vmlinuz-2.6.32-71.el6.x86_64 ro root=/dev/... crashkernel=auto rhgb panic=10 quiet initrd /initramfs-2.6.32-71.el6.x86_64.img ... |
Pour que cette option soit prise en compte, redémarrer le système.
NOTE : Il est possible de définir ce paramètre via « sysctl » ce qui ne nécessite pas de redémarrage.
Activation via « sysctl »
Pour définir « à chaud » le redémarrage automatique en cas de « kernel panic » utilisez « sysctl » (ce qui évite le reboot pour la prise en compte).
Ajouter la clé « kernel.panic=X », où « X » est le temps en secondes avant redémarrage de la machine, au fichier « /etc/sysctl.conf » :
19:29:30 mafalda ~ # cat /etc/sysctl.conf ... kernel.panic=10 ... |
et recharger le contenu du fichier « sysctl.conf » via « sysctl » :
19:30:06 mafalda ~ # sysctl -p kernel.panic = 10 |
ou définir la valeur seule via « sysctl » :
19:32:33 mafalda ~ # sysctl -w kernel.panic=10 kernel.panic = 10 |
NOTE : La définition de « kernel.panic » dans sysctl.conf est suffisante pour fixer le redémarrage du système en cas de défaillance du noyau.
Test de fonctionnement
Le nombre de secondes défini avant redémarrage de la machine est consultable sous « /proc/sys/kernel/panic ». Si la valeur est à 0, aucun redémarrage n’est prévu :
20:09:10 mafalda ~ # cat /proc/sys/kernel/panic 0 20:09:12 mafalda ~ # sysctl -w kernel.panic=10 kernel.panic = 10 20:09:16 mafalda ~ # cat /proc/sys/kernel/panic 10 |
Si la machine sur laquelle vous travaillez n’est pas en production, vous pouvez tester la prise en compte de cette nouvelle politique en déclenchant volontairement un « kernel panic ». Consultez “kernel panic” : Faites paniquer votre noyau Linux sur Admin Linux pour tester en condition réelle le comportement de votre système.
Très utile ça.
Je viens de le mettre en place chez moi avec grub fallback (passage sur un autre noyau par grub si le premier échoue au boot).