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

Материал из Wiren Board
Это утверждённая версия страницы. Она же — наиболее свежая версия.

Принцип работы

В контроллере есть два сторожевых таймера (англ. watchdog): программный и аппаратный, которые дополняют друг друга.

Программный контролирует работу отслеживаемых им сервисов, а аппаратный контролирует работу операционной системы, получая периодические сигналы от программного таймера.

Поэтому при циклической перезагрузке контроллера, подключитесь к Debug Console и смотрите вывод — там будут подсказки, что происходит.

Аппаратный

Как устроен

Аппаратный таймер отсчитывает заданное время и по переполнению счётчика перезагружает контроллер сбросом питания.

Реализация аппаратного таймера зависит от версии контроллера:

  • Wiren Board 7.4 и новее — сделан на Embedded Controller, считает до 60 секунд и сбрасывает питание контроллера.
  • Wiren Board 5, Wiren Board 6, Wiren Board 7 — сделан на специальной микросхеме-компараторе, считает до 15 секунд и сбрасывает питание контроллера.

В актуальном ПО контроллера таймер представлен устройством /dev/watchdog1.

Отключение

Если операционная система контроллера не загружается, а контроллер находится в циклической перезагрузке — нужно отключить аппаратный таймер. Процедура зависит от версии контроллера, корпус контроллера надо разобрать:

  • Wiren Board 7.4 и новее — нажать и держать кнопку кнопку B1 или запаять перемычку Watchdog OFF. Это блокирует работу Wiren Board Embedded Controller, поэтому вместе с отключением таймера у вас перестанут работать: входы Ax, кнопка включения и другие выполненные на нём функции.
  • Wiren Board 7.2…7.3 — запаять перемычку 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.

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

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

Программный

Как устроен

В качестве программного таймера используется сервис watchdog, который каждые 30 секунд смотрит, запущен ли указанный в конфигурации сервис. Если какой-то из отслеживаемых сервисов упадёт — watchdog отправит всем процессам сигнал SIGTERM, что приведёт к перезагрузке ОС. В логе при этом появится строчка вида: systemd-journald[139]: Received SIGTERM from PID xxxx (watchdog).

Ещё этот сервис сообщает о нормальной работе операционной системы аппаратному таймеру через сброс его счётчика. А пока сервис не запущен в первые секунды включения контроллера — счётчик аппаратного таймера сбрасывает загрузчик.

Конфигурирование

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

Чтобы отредактировать конфигурацию сервиса watchdog, нужно его корректно остановить, а пока сервис будет остановлен, счётчик аппаратного таймера будет сбрасывать процессор.

Например, добавим слежение за nginx:

  1. Подключитесь к контроллеру по SSH.
  2. Остановите сервис:
    systemctl stop watchdog
    
  3. Внесите изменения в конфигурационный файл:
    nano /etc/watchdog.conf
    
  4. Добавьте новую запись с pidfile:
    # Test if vital daemons are running
    pidfile         = /var/run/sshd.pid
    pidfile         = /var/run/nginx.pid
    
  5. Нажмите Ctrl+S для сохранения изменений, Ctrl+X — для выхода из редактора.
  6. Запустите сервис:
    systemctl start watchdog
    

Отключение

Если вы добавили слежение за каким-то сервисом, а он не запускается — контроллер будет загружать операционную систему, а потом перезагружаться.

Чтобы всё исправить, сразу после загрузки операционной системы остановите watchdog, на это у вас есть несколько секунд:

  1. Подключитесь к контроллеру через Debug Console.
  2. Если у вас контроллер Wiren Board 7.2 и старее — включите контроллер переключателем.
  3. Дождитесь загрузки операционной системы и приглашения login.
  4. Войдите в командную строку контроллера, для этого нажмите Enter и введите логин / пароль.
  5. Остановите сервис:
    systemctl stop watchdog
    
  6. Исправьте проблему с отслеживаемым сервисом, или уберите его из файла конфигурации /etc/watchdog.conf.
  7. Запустите сервис:
    systemctl start watchdog
    

Перезагрузки должны прекратиться.