web-dev-qa-db-fra.com

Comment faire pour qu'Ubuntu affiche une notification en cas d'échec de la somme de contrôle btrfs?

Comme aa-notify, qui affiche une notification sur mon bureau lorsque AppArmor nie quelque chose.

1
Artyom

L'exécution du script ci-dessous en arrière-plan affichera une notification:

enter image description here

... et ajoutez le message d'erreur avec horodatage au fichier journal (~/btrfs_errors.txt), ressemblant à:

Mon Oct 10 08:25:12 2016
BTRFS error (device md2): csum failed ino 7551 off 2310144 csum 623932426 expected csum 3810482428

Le script

#!/usr/bin/env python3
import subprocess
import time
import os

log = os.path.join(os.environ["HOME"], "btrfs_errors.txt")                                     

while True:
    msginfo = subprocess.check_output(["dmesg", "--read-clear"]).decode("utf-8")
    match = [l for l in msginfo.splitlines() if all(["btrfs" in l, "error" in l])]
    if match:
        with open(log, "a+") as out:
            out.write(time.ctime()+"\n")
            for l in match:
                out.write(l)
            out.write("\n\n")
        subprocess.Popen(["notify-send", "-i", "gnome-disks",
                 "BTRFS error","Please see ~/btrfs_errors.txt for details"])

    time.sleep(4)

Comment utiliser

  1. Copiez le script ci-dessus dans un fichier vide, enregistrez-le sous check_btrfs. Copiez le script dans un emplacement où il ne peut pas être modifié sans les privilèges d'administrateur, comme /usr/local/bin. Rendez le script exécutable (!).
  2. Ajoutez le script au fichier sudoers, comme décrit par ex. ici . Cela est nécessaire, car le script est exécuté à l'aide de Sudo. Le script lit à partir de dmesg et efface l'historique de dmesg après lecture, pour éviter d'accumuler la quantité de sortie à lire. La suppression de dmesg nécessite des privilèges Sudo.
    Cela signifie cependant que si vous avez besoin de la sortie de dmesg à d'autres fins également, nous devons contourner ce problème. Si oui, veuillez le mentionner.
  3. Testez-le avec la commande:

    Sudo check_btrfs
    

    si vous l'avez copié dans un répertoire dans $PATH. Sinon, incluez le chemin d'accès au script.

  4. Si tout fonctionne bien, ajoutez-le aux applications de démarrage: Dash> Applications de démarrage> Ajouter. Ajoutez la commande:

    Sudo check_btrfs
    

Comme je ne peux pas le tester avec des erreurs "réelles" btrfs, je l'ai exécuté en vérifiant d'autres événements (brancher une clé USB). Pour terminer le script, j'ai utilisé le format du message dans votre lien. Le script vérifie les lignes, contenant les deux chaînes btrfs et error.

Ce qu'il fait

Le script:

  • une fois toutes les quatre secondes lit la sortie de dmesg
  • en cas d'erreur, il affiche une notification et ajoute l'erreur au fichier: ~/btrfs_errors.txt
  • efface l'historique de dmesg pour garder le script "low on juice".
1
Jacob Vlijm