Как заставить Ubuntu показывать уведомление при сбое контрольной суммы btrfs?
Как aa-notify, который показывает уведомление на моем рабочем столе, когда AppArmor что-то отрицает.
1 ответ
Запуск сценария ниже в фоновом режиме покажет уведомление:
... и добавить сообщение об ошибке с отметкой времени в файл журнала (~/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
, Если нет, укажите путь к сценарию.Если все работает нормально, добавьте его в Startup Applications: Dash > Startup Applications > Add. Добавьте команду:
sudo check_btrfs
Поскольку я не могу проверить это с "реальным" btrfs
ошибки, я запустил его с проверкой других событий (подключив флешку). В финальном сценарии я использовал формат сообщения в вашей ссылке. Скрипт проверяет строки, содержащие обе строки btrfs
а также error
,
Что оно делает
Сценарий:
- один раз в четыре секунды читает вывод
dmesg
- в случае ошибки, он показывает уведомление и добавляет ошибку в файл:
~/btrfs_errors.txt
- очищает историю
dmesg
держать сценарий "мало на сок".