Как aa-notify, который показывает уведомление на моем рабочем столе, когда AppArmor отклоняет что-то.
Запущение скрипта ниже в фоновом режиме оба покажет уведомление:
... и добавьте сообщение об ошибке с меткой времени к файлу журнала (~/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)
check_btrfs
. Скопируйте сценарий в местоположение, где он не может быть отредактирован без полномочий администратора, такой как /usr/local/bin
. Сделайте исполняемый файл сценария (!).sudoers
файл, как описано, например, здесь. Это необходимо, потому что скрипт запущен при помощи sudo
. Сценарий читает из dmesg
, и очищается dmesg
'история после чтения, для предотвращения накопления суммы вывода для чтения. Очистка dmesg
потребности sudo полномочия.dmesg
для других целей также, мы должны работать вокруг. Раз так упомяните.Тестовый прогон это с командой:
sudo check_btrfs
если Вы скопировали его в каталог в $PATH
. В противном случае включайте путь к сценарию.
Если все хорошо работает, добавьте его для Запущения Приложений: Тире> Приложения Запуска> Добавляет. Добавьте команду:
sudo check_btrfs
Так как я не могу протестировать его с "реальным" btrfs
ошибки, я выполнил его с проверкой другие события (включающий палку usb). В финале сценарий я использовал формат сообщения в Вашей ссылке. Сценарий проверяет строки, содержа обе строки btrfs
и error
.
Сценарий:
dmesg
~/btrfs_errors.txt
dmesg
поддерживать сценарий на низком уровне "на соке".