|
|
(не показаны 54 промежуточные версии 8 участников) |
Строка 1: |
Строка 1: |
| {{DISPLAYTITLE:Watchdog в контроллерах Wiren Board}}
| | <languages/> |
| == Принцип работы ==
| | <translate> |
| В контроллере есть два сторожевых таймера (англ. watchdog): программный и аппаратный, которые дополняют друг друга.
| | Сторожевой таймер, или "Watchdog" — аппаратно реализованная схема контроля за зависанием системы. |
|
| |
|
| Программный контролирует работу отслеживаемых им сервисов, а аппаратный контролирует работу операционной системы, получая периодические сигналы от программного таймера.
| | Представляет собой таймер, построенный на отдельной микросхеме-компараторе. Таймер периодически сбрасывается подачей переменного сигнала, подаваемого на вход таймера с вывода GPIO процессора. |
|
| |
|
| Поэтому при циклической перезагрузке контроллера, подключитесь к [[WB Debug Console|Debug Console]] и смотрите вывод — там будут подсказки, что происходит.
| | Если сброса не произошло в течение некоторого интервала времени (~15c), происходит перезагрузка по питанию (выключение одной из линий питания на 3-4 секунды). |
|
| |
|
| == Аппаратный ==
| | В системе watchdog представлен устройством /dev/watchdog1, конфигурация watchdog-демона храниться в файле /etc/watchdog.conf |
| ===Как устроен===
| | </translate> |
| Аппаратный таймер отсчитывает заданное время и по переполнению счётчика перезагружает контроллер сбросом питания.
| |
| | |
| Реализация аппаратного таймера зависит от версии контроллера:
| |
| * 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.
| |
| | |
| После устранения причин перезагрузки аппаратный таймер надо включить.
| |
| | |
| На иллюстрациях ниже красными кружками показаны контакты, к которым нужно подключить контакт 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: WD-6.7.png | Wiren Board 6.7. Подключить WD к GND
| |
| Image: Watchdog_disable_wb6.png | Wiren Board 6. Подключить контакт ON/OFF к GND
| |
| Image: Watchdog_disable_wb5.png | Wiren Board 5. Подключить контакт ON/OFF к GND
| |
| </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>.
| |
| | |
| Ещё этот сервис сообщает о нормальной работе операционной системы аппаратному таймеру через сброс его счётчика. А пока сервис не запущен в первые секунды включения контроллера — счётчик аппаратного таймера сбрасывает загрузчик.
| |
| | |
| === Конфигурирование ===
| |
| По умолчанию отслеживается только sshd, вы можете добавлять свои сервисы, которые отвечают за бизнес-логику вашей системы автоматизации.
| |
|
| |
| Чтобы отредактировать конфигурацию сервиса watchdog, нужно его корректно остановить, а пока сервис будет остановлен, счётчик аппаратного таймера будет сбрасывать процессор.
| |
| | |
| Например, добавим слежение за nginx:
| |
| # Подключитесь к контроллеру по [[SSH]].
| |
| # Остановите сервис:
| |
| #: <syntaxhighlight lang="bash">
| |
| 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>
| |
| | |
| === Отключение ===
| |
| Если вы добавили слежение за каким-то сервисом, а он не запускается — контроллер будет загружать операционную систему, а потом перезагружаться.
| |
| | |
| Чтобы всё исправить, сразу после загрузки операционной системы остановите watchdog, на это у вас есть несколько секунд:
| |
| # Подключитесь к контроллеру через [[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
| |
| </syntaxhighlight>
| |
| | |
| Перезагрузки должны прекратиться.
| |