Table of Contents
Настройка watchdog в Raspberry Pi 4
Зачем это нужно
Зачем? Отвечает Александр Друзь ChatGPT:
Watchdog на Raspberry Pi используется для автоматического мониторинга состояния системы и перезапуска устройства в случае зависания, сбоя или других критических ошибок. Это может быть полезно, например, в автоматизированных системах или проектах, где требуется высокая надежность работы, и недопустимы длительные простои.
Как работает Watchdog? Watchdog — это либо аппаратный, либо программный таймер, который регулярно должен получать "сигналы жизни" от системы. Если сигналы не поступают в течение заданного времени, таймер автоматически инициирует перезагрузку системы. Это помогает восстановить работоспособность системы в случае зависания или сбоев.
Далее по тексту WD=Watchdog.
Инструкции
Broadcom чип
В Raspberry Pi 4 аппаратный WD. Посмотрим детальнее
dmesg
dx@rpi:~ $ dmesg | grep -i watchdog [ 1.538466] bcm2835-wdt bcm2835-wdt: Broadcom BCM2835 watchdog timer
WD является systemd процессом, поэтому можем посмотреть информацию через systemctl
dx@rpi:~ $ systemctl show | grep -i watchdog WatchdogLastPingTimestampMonotonic=18446744073709551615 RuntimeWatchdogUSec=0 RuntimeWatchdogPreUSec=0 RebootWatchdogUSec=10min KExecWatchdogUSec=0 ServiceWatchdogs=yes
Также можно использовать утилиту wdctl (входит в состав пакета util-linux) для получения информации о состоянии WD.
dx@rpi:~ $ sudo wdctl Device: /dev/watchdog0 Identity: Broadcom BCM2835 Watchdog timer [version 0] Timeout: 15 seconds Timeleft: 15 seconds Pre-timeout: 0 seconds FLAG DESCRIPTION STATUS BOOT-STATUS KEEPALIVEPING Keep alive ping reply 1 0 MAGICCLOSE Supports magic close char 0 0 SETTIMEOUT Set timeout (in seconds) 0 0
journalctl
dx@rpi:~ $ journalctl -b --no-pager | grep Watchdog Nov 10 00:25:42 rpi systemd[1]: Using hardware watchdog 'Broadcom BCM2835 Watchdog timer', version 0, device /dev/watchdog0 Nov 10 00:25:42 rpi systemd[1]: Watchdog running with a timeout of 15s.
Настройка
Добавить в файл /etc/systemd/system.conf
RuntimeWatchdogSec=10 RebootWatchdogSec=2min
RuntimeWatchdogSec - если система перестаёт отвечать в течение этого времени, WD инициирует перезагрузку устройства.
Например, значение 10 означает, что WD ожидает сигнал каждые 10 секунд. Если сигнал не поступает, WD считает, что система зависла, и предпринимает действие (обычно перезагрузку).
Можно увеличить значение, чтобы избежать ложных срабатываний. Параметр RuntimeWatchdogSec может принимать значения от 1 до 15 секунд.
RebootWatchdogSec - этот параметр указывает время в минутах, которое WD будет ждать перед перезапуском системы после обнаружения сбоя.
Значение 2min означает, что система будет перезапущена через 2 минуты после активации WD.
Осталось применить изменения в системе
sudo systemctl daemon-reload
Дополнительные параметры можно посмотреть в документации SYSTEMD-SYSTEM.CONF(5).
Проверка
Вызываем kernel panic
sudo echo 1 > /proc/sys/kernel/sysrq sudo echo "c" > /proc/sysrq-trigger
systemd-analyze
Вопрос не прямо связанный с WD - а сколько же времени занимает загрузка моего RPi?
Про это нам расскажет наш специальный корреспондент systemd-analyze
Просто показать время загрузки
$ systemd-analyze time Startup finished in 3.341s (kernel) + 10.877s (userspace) = 14.218s multi-user.target reached after 10.828s in userspace.
Линукс-блейминг - отображает список служб и процессов, которые запускались во время загрузки системы, с указанием времени, затраченного на их старт. Это помогает выявить службы, замедляющие процесс загрузки.
$ systemd-analyze blame 4.740s NetworkManager-wait-online.service 1.480s raspi-config.service 1.382s dev-mmcblk0p2.device 1.321s apt-daily-upgrade.service 1.319s apt-daily.service 1.142s e2scrub_reap.service 1.036s networking.service 856ms rpi-eeprom-update.service 852ms ModemManager.service 759ms NetworkManager.service 657ms man-db.service 627ms lighttpd.service
Вывод графическом виде (SVG)
systemd-analyze plot > rpi.svg
EOM
Discussion