Как сделать Ubuntu для показа уведомления, когда существует btrfs несовпадение контрольной суммы?

Как aa-notify, который показывает уведомление на моем рабочем столе, когда AppArmor отклоняет что-то.

1
задан 10 October 2016 в 10:06

1 ответ

Запущение скрипта ниже в фоновом режиме оба покажет уведомление:

enter image description here

... и добавьте сообщение об ошибке с меткой времени к файлу журнала (~/btrfs_errors.txt), сходство с:

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

Сценарий

#!/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)

Как использовать

  1. Скопируйте сценарий выше в пустой файл, сохраните его как check_btrfs. Скопируйте сценарий в местоположение, где он не может быть отредактирован без полномочий администратора, такой как /usr/local/bin. Сделайте исполняемый файл сценария (!).
  2. Добавьте сценарий к sudoers файл, как описано, например, здесь. Это необходимо, потому что скрипт запущен при помощи sudo. Сценарий читает из dmesg, и очищается dmesg'история после чтения, для предотвращения накопления суммы вывода для чтения. Очистка dmesg потребности sudo полномочия.
    Это означает однако это при необходимости в выводе dmesg для других целей также, мы должны работать вокруг. Раз так упомяните.
  3. Тестовый прогон это с командой:

    sudo check_btrfs
    

    если Вы скопировали его в каталог в $PATH. В противном случае включайте путь к сценарию.

  4. Если все хорошо работает, добавьте его для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:

    sudo check_btrfs
    

Так как я не могу протестировать его с "реальным" btrfs ошибки, я выполнил его с проверкой другие события (включающий палку usb). В финале сценарий я использовал формат сообщения в Вашей ссылке. Сценарий проверяет строки, содержа обе строки btrfs и error.

Что это делает

Сценарий:

  • однажды в четыре секунды читает вывод dmesg
  • в случае ошибки это показывает уведомление и добавляет ошибку к файлу: ~/btrfs_errors.txt
  • очищает историю dmesg поддерживать сценарий на низком уровне "на соке".
1
ответ дан 7 December 2019 в 15:47

Другие вопросы по тегам:

Похожие вопросы: