Watchdog в контроллерах Wiren Board

Материал из Wiren Board
Другие языки:

Wiren Board 7.4

Как устроен

Wbincludes:Watchdog 7.4 How Does It Work

Отключение

Кнопка и перемычка отключения сторожевого таймера

Отключайте слежение за сервисами только в крайнем случае, например, если какой-то из сервисов не работает должным образом. После устранения причин, сторожевой таймер надо включить.

На контроллере есть физическая кнопка, которая эмулирует сигнал на сброс сторожевого таймера, находится она на плате и подписана как B1. Используйте её, если один из отслеживаемых сервисов зависает, или если вам нужно внести изменение в конфигурацию. Также есть перемычка Watchdog OFF, замкнув её каплей припоя, можно отключить сторожевой таймер навсегда.

Watchdog следит за сервисами, указанными в файле /etc/watchdog.conf в разделе # Test if vital daemons are running.

Вы можете добавить в него свой сервис или отредактировать заводской список:

  1. Разберите корпус контроллера.
  2. Нажмите кнопку B1 и включите контроллер. Далее можете удерживать кнопку нажатой или нажимать её примерно раз в 20-30 секунд — так вы будете сбрасывать таймер.
  3. Остановите сервис командой systemctl stop watchdog.
  4. Измените список отслеживаемых сервисов в файле /etc/watchdog.conf.
  5. Запустите сервис командой systemctl start watchdog.

Wiren Board 5, Wiren Board 6 и Wiren Board 7.2…7.3

В контроллере два сторожевых таймера (англ. watchdog) — аппаратный и программный.

Аппаратный сторожевой таймер представляет собой отдельную микросхему-компаратор, ведущую отсчёт времени. Если таймер досчитывает до заданного времени (около 15 секунд), происходит перезагрузка по питанию (выключение одной из линий питания на 3-4 секунды). В нормальном режиме таймер периодически сбрасывается подачей переменного сигнала, подаваемого на вход таймера с одного из выводов GPIO процессора. Этот GPIO контролируется специальным сервисом Linux watchdog. Интерфейс сторожевого таймера /dev/watchdog1, конфигурация сервиса хранится в файле /etc/watchdog.conf.

Программный таймер выполнен в виде сервиса watchdog.

Отключение сторожевого таймера

Сторожевой таймер иногда требуется отключить:

  1. Если вам нужно полностью выключить контроллер, не снимая с него питание (например, по событию от источника бесперебойного питания) — если сторожевой таймер будет работать, то контроллер даже после команды halt через некоторое время перезагрузится по питанию, и начнёт работать. При отключенном сторожевом таймере возобновление работы контроллера будет возможно только при ручном сбросе питания контроллера.
  2. Если вы неправильно настроили одну из важных служб контроллера, и он ушёл в циклическую перезагрузку: из-за неправильной конфигурации службы не будут запускаться, а сторожевой таймер будет замечать их отсутствие и перезапускать контроллер.

Отключение аппаратного сторожевого таймера

Для отключения требуется разобрать корпус контроллера и:

  • в Wiern Board 7.2 — запаять перемычку Watchdog OFF;
  • в Wiren Board 6.9 нет простого способа аппаратно отключить сторожевой таймер;
  • в Wiren Board 6.8 — соединить контакт WD с +5V;
  • в Wiren Board 6.7 — соединить контакт WD с GND;
  • в Wiren Board 6.3 – 6.6 и Wiren Board 5 соединить один из выводов разъема ON/OFF с GND.

На иллюстрациях красными кружками показаны контакты, к которым нужно подключить контакт WB или контакт из разъёма ON/OFF. Фиолетовой стрелкой показан пример подключения.

Отключение программного сторожевого таймера

Так вы сможете только остановить циклическую перезагрузку из-за неправильной работы ПО. Добиться им полного выключения контроллера при наличии питания не получится.

Чтобы отключить сторожевой таймер, остановите его службу:

systemctl stop watchdog

Но после перезагрузки контроллера служба сторожевого таймера запустится снова.

Если вы исправили ошибки в работе ПО и хотите запустить обратно сторожевой таймер без перезагрузки контроллера, выполните

systemctl start watchdog

Если вы хотите навсегда отключить слежение сторожевого таймера за одним из сервисов, отредактируйте конфигурационный файл /etc/watchdog.conf, закомментировав строки соответствующих сервисов (в этом примере отключено слежение за nginх):

# Test if vital daemons are running
pidfile		= /var/run/syslogd.pid 
pidfile		= /var/run/sshd.pid
pidfile		= /var/run/mosquitto.pid
#pidfile		= /var/run/nginx.pid

а затем выполните

systemctl restart watchdog