Watchdog linux что это
Мониторинг за изменениями файловой системы
Установка
Можно взять готовую версию из PIP:
$ pip install watchdog
Сам PIP ставится как пакет python-pip, порт devel/py-pip, etc.
Либо собрать из исходников через setup.py.
Достаточно подробно все расписано в оригинальном руководстве. Правда там описание версии 0.5.4, а сейчас актуальна 0.6.0. Однако, вся разница в правке копирайтов и замене отступа в 4 пробела на отступ в 2. «Google code style» 🙂
Вообще, там довольно много особенностей сборки по версиям самого python так и по целевой платформе. Они все описаны по ссылке выше, но если будет нужно, допишу в статью вкратце на русском.
Кроме того, собрать модуль можно на несовместимой ОС, но тогда в дело вступится fallback-реализация, делающая «слепки» структуры ФС с последующими сравнениями. Возможно, так кто-то и делал у себя при решении подобной задачи 🙂
Сам же я пробовал собрать под ubuntu 11.4 и freebsd-8.2 RELEASE, каких-либо проблем при сборке и работе не возникло.
Базовый пример
Предположим, что нас интересуют изменения по некоему пути /path/to/smth, связанные с созданием, удалением и переименованием файлов и директорий.
Класс Observer выбирается в /observers/__init__.py исходя из возможностей вашей ОС, так что нет необходимости самостоятельно решать, что же выбрать.
Класс FileSystemEventHandler является базовым классом обработчика событий изменения. Он мало что умеет, но мы научим его потомка:
Полный список методов можно увидеть в самом FileSystemEventHandler.dispatch: on_modified, on_moved, on_created, on_deleted.
Observer является относительно далеким потомком threading.Thread, соотвественно после вызова start() мы получаем фоновый поток, следящий за изменениями. Так что если скрипт сразу завершится, то ничего толкового мы не получим. Реалиация ожидания зависит в первую очередь от применения модуля в реальном проекте, сейчас же можно просто сделать костыль:
Ждем событий изменений ФС до прихода Ctrl+C (SIGINT), после чего говорим нашему потоку завершиться и ждем, пока он это выполнит.
Запускаем скрипт, идем по нашему пути и:
На выходе скрипта имеем:
В методы нашего класса Handler в поле event приходят потомки FileSystemEvent, перечисленные в watchdog/events.py.
У всех есть свойства src_path, is_directory, event_type («created», «deleted», и т.п.). Для события moved добавляется свойство dest_path.
Ну если вы больше ничего не хотите… А разве ещё что-нибудь есть?
RegexMatchingEventHandler делает тоже самое, но с явным указанием regexp-выражений в конструкторе:
PatternMatchingEventHandler внутри себя в итоге транслирует шаблоны в регулярки, так что должен работать медленнее из-за наличия такого оверхеда.
Наконец, LoggingEventHandler выводит все в лог через logging.info().
— Вот и все. Может кому пригодится.
P.S.
При слежении за директорией, в которой (и в ее дочерних) содержатся папки/файлы не с ascii именованием, возникнет исключение exceptions.UnicodeEncodeError в глубинах watchdog’а. В Linux (inotify) он возникает в watchdog.observers.inotify.Inotify._add_watch.
Причина — чтение содержимого в ascii кодировке.
Для исправления ситуации можно пропатчить метод:
Вот пример исходной строки, и ее repr() до и после обработки encode():
Установка и настройка Watchdog
Сторожевой таймер (Watchdog timer) — аппаратно реализованная схема контроля над зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение некоторого интервала времени, происходит принудительная перезагрузка системы. В некоторых случаях сторожевой таймер может посылать системе сигнал на перезагрузку («мягкая» перезагрузка), в других же — перезагрузка происходит аппаратно (замыканием сигнального провода RST или подобного ему).
Установка в Linux Ubuntu/Debian:
Список некоторых файлов которые будут установлены в систему:
Возможные параметры конфига /etc/watchdog.conf:
Если пишутся логи, можно пропускать запись событий каждое указанно количество интервалов. Например если logtick = 60 и interval 10, получится 600 секунд, то есть в логируемый файл будет добавляться запись не чаще одного раза в 10 минут.
Максимально разрешенное значение загрузки системы за 1 минуту при превышении которого система перезагрузится. 0 — отключает проверку.
Максимально разрешенное значение загрузки системы за 5 минуту при превышении которого система перезагрузится. 0 — отключает проверку.
Максимально разрешенное значение загрузки системы за 15 минуту при превышении которого система перезагрузится. 0 — отключает проверку.
Установка минимального количества виртуальной памяти которое должно быть свободно. 0 — проверка отключено.
Установка максимально разрешенной температуры.
Установка имени устройства.
Установка имени устройства температуры.
Файловый режим, проверка файлов.
Интервал времени для файлового режима.
Имя pid файла. Можно добавить отслеживаемый процесс, например «pidfile = /var/run/apache2.pid». В случае невозможности запуска процесса watchdog будет постоянно перезагружать систему.
Режим пинга, для проверки сетевых соединений. Опция может быть использована более одного раза.
Установка имени сетевого интерфейса.
Выполнение пользовательского теста.
Тест может выполняться указанное количество секунд. 0 — неограничено.
Выполняется при невозможности перезагрузки системы.
Адрес email для уведомлений, можно оставить значение пустым для отключения.
Yes для невозможности выгрузки watchdog из оперативной памяти.
Установка приоритета для режима realtime.
Пример настройки с Intel TCO Watchog Timer.
Загрузка модуля:
В /etc/watchdog.conf должно быть раскоментировано/добавлено:
В /etc/default/watchdog указать имя модуля:
Можно добавить опцию отладки чтобы в syslog журнал писалась отладочная информация:
Мониторить в реальном времени записи syslog можно командой:
Настройка watchdog в Linux
Установка в Linux Ubuntu/Debian:
Список некоторых файлов которые будут установлены в систему:
/etc/init.d/watchdog
/etc/init.d/wd_keepalive
/etc/watchdog.conf
/etc/default/watchdog
/dev/watchdog
/usr/sbin/watchdog
/usr/sbin/wd_identify
/usr/sbin/wd_keepalive
/usr/share/doc/watchdog/
/usr/share/man/man5/watchdog.conf.5.gz
/usr/share/man/man8/watchdog.8.gz
/usr/share/man/man8/wd_identify.8.gz
/usr/share/man/man8/wd_keepalive.8.gz
logtick =
Если пишутся логи, можно пропускать запись событий каждое указанно количество интервалов. Например если logtick = 60 и interval 10, получится 600 секунд, то есть в логируемый файл будет добавляться запись не чаще одного раза в 10 минут.
max-load-1 =
Максимально разрешенное значение загрузки системы за 1 минуту при превышении которого система перезагрузится. 0 — отключает проверку.
max-load-5 =
Максимально разрешенное значение загрузки системы за 5 минуту при превышении которого система перезагрузится. 0 — отключает проверку.
max-load-15 =
Максимально разрешенное значение загрузки системы за 15 минуту при превышении которого система перезагрузится. 0 — отключает проверку.
min-memory =
Установка минимального количества виртуальной памяти которое должно быть свободно. 0 — проверка отключено.
max-temperature =
Установка максимально разрешенной температуры.
watchdog-device =
Установка имени устройства.
temperature-device =
Установка имени устройства температуры.
file =
Файловый режим, проверка файлов.
change =
Интервал времени для файлового режима.
Имя pid файла. Можно добавить отслеживаемый процесс, например «pidfile = /var/run/apache2.pid». В случае невозможности запуска процесса watchdog будет постоянно перезагружать систему.
ping =
Режим пинга, для проверки сетевых соединений. Опция может быть использована более одного раза.
interface =
Установка имени сетевого интерфейса.
test-binary =
Выполнение пользовательского теста.
test-timeout =
Тест может выполняться указанное количество секунд. 0 — неограничено.
repair-binary =
Выполняется при невозможности перезагрузки системы.
admin =
Адрес email для уведомлений, можно оставить значение пустым для отключения.
realtime =
Yes для невозможности выгрузки watchdog из оперативной памяти.
priority =
Установка приоритета для режима realtime.
Пример настройки с Intel TCO Watchog Timer.
Загрузка модуля:
В /etc/watchdog.conf должно быть раскоментировано/добавлено:
В /etc/default/watchdog указать имя модуля:
Можно добавить опцию отладки чтобы в syslog журнал писалась отладочная информация:
Мониторить в реальном времени записи syslog можно командой:
Аппаратный «watchdog» или незаменимый помощник в борьбе с зависанием
В одной компании было много терминалов, и одна из неблагодарных задач для техподдержки — ездить по точкам и перезапускать операционную систему внутри терминалов. Было решено бросить вызов этой проблеме в виде разработки аппаратного сторожевого таймера.
В итоге мы получили устройство, которое подключается к расширительному спаренному USB-разъему на материнской плате.
Данное устройство имеет следующие возможности:
Алгоритм работы прост: внутри находятся два настраиваемых таймера, которые постоянно отсчитывают заданное время, по истечению которого имитируется нажатие соответствующих кнопок (POWER и RESET). Чтобы предотвратить случайную перезагрузку, необходимо периодически послать команду сброса таймера.
Лучше, чтобы за процедуру сброса таймеров отвечало целевое приложение, а не стороннее или системное (Cron, служба расписаний) по причине того, что вероятность сбоя в системе меньше, чем в приложении (хотя, у кого как).
Обмен информацией аналогичен консольному.
команда | Описание | Пример |
---|---|---|
help | Краткая справка по командам | help |
LED1 | Управление светодиодом, по умолчанию выключен | LED1 ON LED1 OFF |
RELAY | Управление реле, по умолчанию включено | RELAY ON RELAY OFF |
KEY1 | Имитация нажатия кнопки 1, по умолчанию не нажата | KEY1 ON KEY1 OFF |
KEY2 | Имитация нажатия кнопки 2, по умолчанию не нажата | KEY2 ON KEY2 OFF |
C1 | Управление таймером 1, связанным с кнопкой 1. Установка времени в секундах, максимальное значение 32767. Для отключения функции таймера, необходимо задать время равное 0. | C1 RES C1 SET 60 C1 SET 0 |
C2 | Управление таймером 2, связанным с кнопкой 2. Установка времени в секундах, максимальное значение 32767. Для отключения функции таймера, необходимо задать время равное 0. | C2 RES C2 SET 60 C2 SET 0 |
USB | Управление питанием USB, по умолчанию включено | USB ON USB OFF |
В случае удачного выполнения команды возвращает «OK».
В случае некорректных данных возвращает «ERROR».
Признаком конца строки служит символ возврата каретки «\r». Также поддерживается режим «\r\n».
Устройство выполнено на базе контроллера STM32F103CA с аппаратной поддержкой USB. Библиотека работы с USB версии V4.0.0. Напряжение работы 3.3В получаем с помощью линейного стабилизатора из 5В на USB. Во всех управляющих цепях используются транзисторы в ключевом режиме. Также не забываем про защитный диод от токов самоиндукции в катушки реле (в моем случае он оказался встроенным).
Настройка Watchdog v5.0 в Linux Ubuntu/Debian
В данной статье рассматриваются процесс запуска китайского сторожевого таймера на оптронах (версия 5.0) в Linux Ubuntu/Debian.
Watchdog версии 5.0:
Настройка watchdog версии 5.0 в Linux Ubuntu/Debian
Для настройки программного обеспечения сначала нужно включить сторожевой таймер только в usb-разъем материнки, не включая проводов управления ресетом и включением/выключением в колодку.
Затем для проверки подключения и распознавания вочдога выполняют команду:
Она покажет все подключенные к материнской плате по интерфейсу usb устройства, выдавая информацию такого вида:
В данном случае нас интересует только сторожевой таймер:
Затем нужно скачать дистрибутив для управления китайским вотчдогом (файл USBWatchdog_LINUX.zip) со страницы производителя finedar Или отсюда, а потом распаковать содержимое архива на контролируемый компьютер.
Затем нужно выполнить следующие действия:
В графическом интерфейсе достаточно просто открыть папку и в контекстном меню, вызываемом правой кнопкой мыши, поставить галочку «Разрешить запуск этого файла в качестве программы» на вкладке «Права».
Отредактировать файлы, находящиеся в папке PCWatchdog0201 в соответствии с их предназначением:
Функции каждого файла в папке PCWatchdog0201 следующие:
По умолчанию программа сторожевого мониторинга имеет такие предустановки:
Если нужно изменить эти параметры, нужно открыть скрипт start_watchdog.sh в текстовом редакторе и поменять его содержимое под свои нужды.
Содержимое этого файла выглядит следующим образом:
Рекомендуется изменить время ожидания (timeout) и время перезапуска, чтобы оно превышало время запуска системного программного обеспечения. Рекомендуемое значение timeout: 120-180 секунд.
Чтобы запустить программное обеспечение для сторожевого мониторинга с функцией контроля заданной программы, нужно скопировать все содержимое папки PCWatchdog0201 (кроме подпапки с драйверами) в папку с майнером, откуда запускать майнер скриптом start_watchdog.sh командой:
В файле monitor_process.sh в текстовом редакторе нужно изменить имя процесса в кавычках (process_name) на на имя использующейся программы майнинга:
Если для загрузки системы нужен пароль, то его нужно записать в файл _PWD_TEMP_:
Для автоматического внесения программы сторожевого таймера в автозагрузку нужно выполнить скрипт set_autostart.sh командой:
Чтобы немедленно перезапустить сторожевой таймер (для проверки его работоспособности и правильности подключений к материнской плате), нужно запустить файл restart_watchdog.sh командой:
Если соединение работает правильно, компьютер немедленно перезагрузится.
Если он не перезапускается немедленно, нужно проверить правильность подключений.
Правильно работающий сторожевой таймер отображает в консоли его настройки и время работы:
Если есть ошибка, нужно проверить, надежно ли сторожевой таймер соединен с USB-разъемом. Если все ОК, а таймер по прежнему не работает, нужно переустановить драйвер.
При появлении ошибкок типа:
нужно прописать в терминале полный путь к скрипту start_watchdog.sh и запускать его от имени суперпользователя.
Для установки драйверов (в случае отсутствия вотчдога в списке отображаемых устройств по команде lsusb) выполняют следующие действия:
Это выглядит следующим образом:
После этого сторож должен нормально заработать.