Watchdog: различия между версиями
Brainroot (обсуждение | вклад) (→Отключение аппаратного сторожевого таймера: грамматика.) |
Sikmir (обсуждение | вклад) м (Fix typo) |
||
(не показано 12 промежуточных версий 2 участников) | |||
Строка 1: | Строка 1: | ||
{{DISPLAYTITLE:Watchdog в контроллерах Wiren Board}} | |||
== Принцип работы == | |||
В контроллере есть два сторожевых таймера (англ. watchdog): программный и аппаратный, которые дополняют друг друга. | |||
В контроллере два сторожевых таймера (англ. | |||
Программный контролирует работу отслеживаемых им сервисов, а аппаратный контролирует работу операционной системы, получая периодические сигналы от программного таймера. | |||
Поэтому при циклической перезагрузке контроллера, подключитесь к [[WB Debug Console|Debug Console]] и смотрите вывод — там будут подсказки, что происходит. | |||
== | == Аппаратный == | ||
===Как устроен=== | |||
Аппаратный таймер отсчитывает заданное время и по переполнению счётчика перезагружает контроллер сбросом питания. | |||
Реализация аппаратного таймера зависит от версии контроллера: | |||
* Wiren Board 7.4 и новее — сделан на [[Wiren_Board_Embedded_Controller|Embedded Controller]], считает до 60 секунд и сбрасывает питание контроллера. | |||
* Wiren Board 5, Wiren Board 6, Wiren Board 7 — сделан на специальной микросхеме-компараторе, считает до 15 секунд и сбрасывает питание контроллера. | |||
< | В актуальном ПО контроллера таймер представлен устройством <code>/dev/watchdog1</code>. | ||
===Отключение=== | |||
Если операционная система контроллера не загружается, а контроллер находится в циклической перезагрузке — нужно отключить аппаратный таймер. | |||
Процедура зависит от версии контроллера, [[Disassembling_the_controller_case|корпус контроллера надо разобрать]]: | |||
* 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. | |||
После устранения причин перезагрузки аппаратный таймер надо включить. | |||
<gallery mode="packed" heights="200px"> | |||
Image: wb7.2.1 watchdog-off.jpg | Wiren Board 7. | На иллюстрациях ниже красными кружками показаны контакты, к которым нужно подключить контакт WD или контакт из разъёма ON/OFF. Фиолетовой стрелкой показан пример подключения. | ||
<gallery mode="packed" heights="200px" caption="Способы отключения аппаратного таймера в разных версиях контроллера"> | |||
Image: Wiren Board EC LED1.jpg | Wiren Board 7.4 и новее. Зажать кнопку B1 или запаять перемычку Watchdog OFF | |||
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 | ||
Строка 34: | Строка 40: | ||
</gallery> | </gallery> | ||
=== | == Программный == | ||
=== Как устроен === | |||
В качестве программного таймера используется сервис [https://manpages.debian.org/bullseye/watchdog/watchdog.8.en.html watchdog], который каждые 30 секунд смотрит, запущен ли указанный в конфигурации сервис. Если какой-то из отслеживаемых сервисов упадёт — watchdog отправит всем процессам сигнал SIGTERM, что приведёт к перезагрузке ОС. В логе при этом появится строчка вида: <code>systemd-journald[139]: Received SIGTERM from PID xxxx (watchdog)</code>. | |||
Ещё этот сервис сообщает о нормальной работе операционной системы аппаратному таймеру через сброс его счётчика. А пока сервис не запущен в первые секунды включения контроллера — счётчик аппаратного таймера сбрасывает загрузчик. | |||
Чтобы | === Конфигурирование === | ||
<syntaxhighlight lang="bash"> | По умолчанию отслеживается только sshd, вы можете добавлять свои сервисы, которые отвечают за бизнес-логику вашей системы автоматизации. | ||
Чтобы отредактировать конфигурацию сервиса watchdog, нужно его корректно остановить, а пока сервис будет остановлен, счётчик аппаратного таймера будет сбрасывать процессор. | |||
Например, добавим слежение за nginx: | |||
# Подключитесь к контроллеру по [[SSH]]. | |||
# Остановите сервис: | |||
#: <syntaxhighlight lang="bash"> | |||
systemctl stop watchdog | systemctl stop watchdog | ||
</syntaxhighlight> | |||
# Внесите изменения в конфигурационный файл: | |||
#: <syntaxhighlight lang="bash"> | |||
nano /etc/watchdog.conf | |||
</syntaxhighlight> | |||
# Добавьте новую запись с pidfile: | |||
#: <syntaxhighlight lang="bash"> | |||
# Test if vital daemons are running | |||
pidfile = /var/run/sshd.pid | |||
pidfile = /var/run/nginx.pid | |||
</syntaxhighlight> | |||
# {{Wbincludes: Save nano}} | |||
# Запустите сервис: | |||
#: <syntaxhighlight lang="bash"> | |||
systemctl start watchdog | |||
</syntaxhighlight> | </syntaxhighlight> | ||
=== Отключение === | |||
Если вы добавили слежение за каким-то сервисом, а он не запускается — контроллер будет загружать операционную систему, а потом перезагружаться. | |||
Если | Чтобы всё исправить, сразу после загрузки операционной системы остановите watchdog, на это у вас есть несколько секунд: | ||
<syntaxhighlight lang="bash"> | # Подключитесь к контроллеру через [[WB Debug Console|Debug Console]]. | ||
# Если у вас контроллер Wiren Board 7.2 и старее — включите контроллер переключателем. | |||
# Дождитесь загрузки операционной системы и приглашения ''login''. | |||
# Войдите в командную строку контроллера, для этого нажмите <kbd>Enter</kbd> и введите логин / пароль. | |||
# Остановите сервис: | |||
#: <syntaxhighlight lang="bash"> | |||
systemctl stop watchdog | |||
</syntaxhighlight> | |||
# Исправьте проблему с отслеживаемым сервисом, или уберите его из файла конфигурации <code>/etc/watchdog.conf</code>. | |||
# Запустите сервис: | |||
#: <syntaxhighlight lang="bash"> | |||
systemctl start watchdog | systemctl start watchdog | ||
</syntaxhighlight> | </syntaxhighlight> | ||
Перезагрузки должны прекратиться. | |||
Текущая версия на 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
Перезагрузки должны прекратиться.