Watchdog: различия между версиями
Sikmir (обсуждение | вклад) м (Fix typo) |
|||
(не показаны 2 промежуточные версии 1 участника) | |||
Строка 20: | Строка 20: | ||
Если операционная система контроллера не загружается, а контроллер находится в циклической перезагрузке — нужно отключить аппаратный таймер. | Если операционная система контроллера не загружается, а контроллер находится в циклической перезагрузке — нужно отключить аппаратный таймер. | ||
Процедура зависит от версии контроллера, [[Disassembling_the_controller_case|корпус контроллера надо разобрать]]: | Процедура зависит от версии контроллера, [[Disassembling_the_controller_case|корпус контроллера надо разобрать]]: | ||
* Wiren Board 7.4 — нажать и держать | * Wiren Board 7.4 и новее — нажать и держать кнопку B1 или запаять перемычку Watchdog OFF. Это блокирует работу Wiren Board Embedded Controller, поэтому вместе с отключением таймера у вас перестанут работать: входы Ax, кнопка включения и другие выполненные на нём функции. | ||
* Wiren Board 7.2…7.3 — запаять перемычку Watchdog OFF. | * Wiren Board 7.2…7.3 — запаять перемычку Watchdog OFF. | ||
* Wiren Board 6.9 нет простого способа аппаратно отключить сторожевой таймер. | * Wiren Board 6.9 нет простого способа аппаратно отключить сторожевой таймер. | ||
Строка 32: | Строка 32: | ||
<gallery mode="packed" heights="200px" caption="Способы отключения аппаратного таймера в разных версиях контроллера"> | <gallery mode="packed" heights="200px" caption="Способы отключения аппаратного таймера в разных версиях контроллера"> | ||
Image: Wiren Board EC LED1.jpg | Wiren Board 7.4. Зажать кнопку B1 или запаять перемычку Watchdog OFF | Image: Wiren Board EC LED1.jpg | Wiren Board 7.4 и новее. Зажать кнопку B1 или запаять перемычку Watchdog OFF | ||
Image: wb7.2.1 watchdog-off.jpg | Wiren Board 7. | Image: wb7.2.1 watchdog-off.jpg | Wiren Board 7.2…7.3. Запаять перемычку Watchdog OFF | ||
Image: wb6.8 watchdog-off.png | Wiren Board 6.8. Подключить WD к +5V | Image: wb6.8 watchdog-off.png | Wiren Board 6.8. Подключить WD к +5V | ||
Image: WD-6.7.png | Wiren Board 6.7. Подключить WD к GND | Image: WD-6.7.png | Wiren Board 6.7. Подключить WD к GND |
Текущая версия на 13:09, 12 апреля 2024
Принцип работы
В контроллере есть два сторожевых таймера (англ. 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:
- Подключитесь к контроллеру по SSH.
- Остановите сервис:
systemctl stop watchdog
- Внесите изменения в конфигурационный файл:
nano /etc/watchdog.conf
- Добавьте новую запись с pidfile:
# Test if vital daemons are running pidfile = /var/run/sshd.pid pidfile = /var/run/nginx.pid
- Нажмите Ctrl+S для сохранения изменений, Ctrl+X — для выхода из редактора.
- Запустите сервис:
systemctl start watchdog
Отключение
Если вы добавили слежение за каким-то сервисом, а он не запускается — контроллер будет загружать операционную систему, а потом перезагружаться.
Чтобы всё исправить, сразу после загрузки операционной системы остановите watchdog, на это у вас есть несколько секунд:
- Подключитесь к контроллеру через Debug Console.
- Если у вас контроллер Wiren Board 7.2 и старее — включите контроллер переключателем.
- Дождитесь загрузки операционной системы и приглашения login.
- Войдите в командную строку контроллера, для этого нажмите Enter и введите логин / пароль.
- Остановите сервис:
systemctl stop watchdog
- Исправьте проблему с отслеживаемым сервисом, или уберите его из файла конфигурации
/etc/watchdog.conf
. - Запустите сервис:
systemctl start watchdog
Перезагрузки должны прекратиться.