Сторожевой таймер (Watchdog)
-
Как автоматически перезагрузить зависшую Raspberry Pi без физического вмешательства?В процессорах Broadcom, используемых в Raspberry Pi, есть встроенный аппаратный сторожевой таймер (он же watchdog). Это специальный регистр, который отсчитывает время и сбрасывает устройство (перезагружает) при достижении предельного значения, если программное обеспечение не сбрасывает таймер.
Работа со сторожевым таймером в Linux осуществляется через интерфейс /dev/watchdog.
Когда приложение записывает данные в /dev/watchdog, оно «сбрасывает» таймер. Если запись не происходит в заданный интервал времени, система автоматически перезагружается.Настройка
Чтобы активировать сторожевой таймер, редактируем конфиг:
sudo nano /boot/config.txt
и добавляем строку
dtoverlay=watchdog
Далее устанавливаем из репозитория службу watchdog:
sudo apt install watchdog
Редактируем конфиг службы watchdog:
sudo nano /etc/watchdog.conf
Добавляем (или раскоментируем) строки:
watchdog-device = /dev/watchdog max-load-1 = 24
max-load-1 - порог максимальной нагрузки системы за последнюю 1 минуту. (также можно использовать параметры max-load-5 и max-load-15, они задают порог нагрузки системы за 5 и 15 минут соответствия)
Если она превысит значение 24, сторожевой таймер будет считать это критической ситуацией и выполнит действие, указанное в конфигурации (например, перезагрузит систему). На процессорах с 4 ядрами, число 24 означает 6-ти кратную перегрузку процессора (соответственно 100% загрузка будет иметь значение 4). Такое может произойти при нехватке ресурсов или зацикливании какого-либо процесса.Какие ещё тригеры для перезагрузки можно прописать в watchdog.conf?
- min-memory=xxxx (в килобайтах): минимальное количество свободной оперативной памяти. Если её осталось меньше указанного значения (xxxx), watchdog перезагрузит систему.
- file=путь_до_фала: проверка наличия определённого файла. Если файл будет отсутствовать, сторожевой таймер выполнит перезагрузку.
- change = период_в_секундах - если файл изменился за данный период времени, то будет выполнена перезагрузка
- ping=ip - если ip адрес, указанный в параметре ping не доступен, то будет выполнена перезагрузка
- interface - указывает сетевой интерфейс, который должен быть активным.
- pidfile - указывает файл PID процесса, который должен быть активным. Если процесс не работает, система будет перезагружена.
- repair-binary - указывает путь к скрипту или программе, которая будет выполнена для попытки восстановления системы перед перезагрузкой.
- test-binary - указывает путь к тестовому скрипту, который должен возвращать 0, если всё работает как надо.
- reboot - указывает, следует ли перезагружать систему в случае сбоя. Возможные значения - yes(да) или no (нет)
Добавляем службу в автозагрузку и запускаем:
sudo systemctl enable watchdog sudo systemctl start watchdog
Проверка
Вызовем искусственную перегрузку системы командой
sudo fork bomb
если сторожевой таймер правильно настроен, то через некоторое время произойдёт автоматическая перезагрузка
-