Forums


  • Si vous n'utilisez pas Linux, vous pouvez vous arrêter de lire ici !

    Si vous utilisez Linux uniquement en mode graphique (KDE, Gnome, ...etc), et/ou que vous redémarrez votre machine tout les jours, ce qui suit n'a pas grand intérêts pour vous

    Donc, j'ai quelques machines qui sont installées avec Ubuntu LTS. Elles tournent 24h/24 et affichent des "uptime" qu'un utilisateur de Window$ ne pourrait pas croire possible razz

    Une bonne partie du temps, je me connecte à distance dessus, en utilisant SSH, en mode terminal

    Il arrive parfois que je sois obligé de faire des mises à jours à distance
    Pas de soucis majeur
    $> sudo apt update
    $> sudo apt upgrade
    et le tour est joué
    A un détail près !
    Contrairement à lorsque vous êtes en mode graphique, à la fin de la procédure rien ne vous indique que vous devez redémarrer la machine
    Au mieux, vous verrez un message lors de votre prochaine connexion


    Lors d'une mise à jour, lorsque qu'un package nécessite un redémarrage, un fichier "/var/run/reboot-required" est créé
    Il suffit donc de vérifier la présence de ce fichier pour savoir s'il on doit rebooter ou pas
    Un petit script bash fait le job
    #!/bin/bash
    if [ -f /var/run/reboot-required ]; then
      echo 'redemarrage necessaire'
    fi
    Ou même mieux, un alias dans .bashrc
    alias rr='if [ -f /var/run/reboot-required ]; then echo "reboot required"; else echo "No reboot needed"; fi'
    , rechargé avec un
    $> source .bashrc
    et voilà
    $> rr
    No reboot needed


    Cependant, il y a un autre cas de figure, moins connu.
    Comme vous le savez, sous Linux, quand vous démarrez une application, ou un service, la majorité est chargé directement en mémoire, ce qui permet des temps d’exécution très rapide.

    Imaginons que j'aille un service "nfs-common" ou "samba" qui permettent de "mounter" des partitions dans le réseau (partager avec un Windows ou un autre Linux)

    Si une mise à jour de ces services est installé, celle-ci se charge de les redémarrer.

    MAIS si on met à jour une librairie, dont dépendent ces services, ceux-ci ne sont pas redémarré. Ils continuent de fonctionner avec l'ancienne version de la librairie qui est chargé en mémoire

    Et vous n'avez pas d'information comme quoi la machine doit être redémarrer !!
    Ce qui peux être problématique si celle-ci est directement connectée à l'Internet (serveur web par exemple) et que la mise à jour était pour corriger un bug dans la dite librairie

    Heureusement tout n'est pas perdu smile
    Il existe un package "debian-goodies" qui, entre autres, installe un petit programme bien utile : "checkrestart"
    Help to find and restart processes which are using old versions of upgraded files (such as libraries)
    Permet de trouver et redémarrer les process qui utilisent d'anciennes versions de fichiers mis à jour (comme des librairies) !!

    Vous avez besoin d'être 'root' ou d'utiliser 'sudo' pour le lancer car il va "fouiller" dans des endroits que seul l'administrateur a (devrait avoir) accès.

    $> sudo checkrestart
    Found 57 processes using old versions of upgraded files
    (42 distinct programs)
    (36 distinct packages)

    Of these, 26 seem to contain systemd service definitions or init scripts which can be used to restart them.
    The following packages seem to have definitions that could be used
    to restart their services:
    nfs-common:
    1513 /sbin/rpc.statd
    ...
    samba:
    1348 /usr/sbin/smbd
    1344 /usr/sbin/smbd
    1346 /usr/sbin/smbd
    ...
    These are the systemd services:
    systemctl restart nfs-idmapd.service
    ...
    systemctl restart nfs-config.service
    ...
    These are the initd scripts:
    ...
    service samba-ad-dc restart
    service smbd restart
    service samba restart
    service nmbd restart
    ...
    These processes (10) do not seem to have an associated init script to restart them:
    ibus:
    1453 /usr/lib/ibus/ibus-x11
    pulseaudio:
    1418 /usr/bin/pulseaudio
    Donc il fait l'inventaire des services qui tournent sur votre machine et qui nécessitent d'être redémarrer suite à une mise à jour
    Il vous donne même les scripts à appeler pour les redémarrer et vous signale s'il n'en existe pas
    Pour les services qui possèdent un script (systemd ou initd), vous pouvez simplement appeler celui-ci et vous n'aurez pas besoin de redémarrer la machine

    Malheureusement, ceux qui n'ont pas de script, eux nécessiterons un redémarrage ... mais généralement ce ne sont pas des process critiques (en ce qui me concerne), donc ils peuvent attendre la prochaine mise à jour du kernel par exemple

    A utiliser après chaque mise à jour, même quand faite par l'interface graphique, histoire de garder une machine propre et stable

    Évidemment, si vous éteignez votre machine tout les soir avant d'aller vous coucher pour la redémarrer le lendemain, tout ceci n'a pas de sens ! angel


    ericc me
     

  • Effectivement moi par exemple cela ne me concerne pas.

    Bien que je n'éteigne pas tous les soirs mes PC ils n'ont pas vocation à rester allumer tout le temps , surtout mon système principale est en roulement continu et je l'utilise presque exclusivement en graphique.

    Merci pour L'astuce wink
     

Modérateur(s): ericc, toxxic, mich_belge