|
|
(не показаны 44 промежуточные версии 7 участников) |
Строка 1: |
Строка 1: |
| {{DISPLAYTITLE:Watchdog в контроллерах Wiren Board}}
| | <languages/> |
| == Принцип работы ==
| | <translate> |
| В контроллере есть два сторожевых таймера (англ. watchdog): программный и аппаратный, которые дополняют друг друга.
| | <!--T:1--> |
| | '''Сторожевой таймер''' (англ. ''watchdog'') — аппаратно реализованная схема контроля за зависанием системы. |
|
| |
|
| Программный контролирует работу отслеживаемых им сервисов, а аппаратный контролирует работу операционной системы, получая периодические сигналы от программного таймера.
| | Представляет собой отдельную микросхему-компаратор, ведущую отсчёт времени. Если таймер досчитывает до заданного времени (около 15 секунд), происходит перезагрузка по питанию (выключение одной из линий питания на 3-4 секунды). В нормальном режиме таймер периодически сбрасывается подачей переменного сигнала, подаваемого на вход таймера с одного из выводов GPIO процессора. Этот GPIO контролируется специальным сервисом Linux. |
|
| |
|
| Поэтому при циклической перезагрузке контроллера, подключитесь к [[WB Debug Console|Debug Console]] и смотрите вывод — там будут подсказки, что происходит.
| | В Linux интерфейс сторожевого таймера /dev/watchdog1, конфигурация сервиса хранится в файле /etc/watchdog.conf. |
|
| |
|
| == Аппаратный ==
| |
| ===Как устроен===
| |
| Аппаратный таймер отсчитывает заданное время и по переполнению счётчика перезагружает контроллер сбросом питания.
| |
|
| |
|
| Реализация аппаратного таймера зависит от версии контроллера:
| |
| * 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>.
| | ==Отключение сторожевого таймера== |
| | Сторожевой таймер иногда требуется отключить: |
| | # Если вам нужно полностью выключить контроллер, не снимая с него питание (например, по событию от источника бесперебойного питания) - если сторожевой таймер будет работать, то контроллер даже после команды <code>halt</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.
| |
|
| |
|
| После устранения причин перезагрузки аппаратный таймер надо включить.
| | <!--T:2--> |
| | Для отключения требуется [[Special:MyLanguage/Разбираем корпус контроллера|разобрать корпус контроллера]] и соединить один из выводов разъема ON/OFF с GND. |
|
| |
|
| На иллюстрациях ниже красными кружками показаны контакты, к которым нужно подключить контакт WD или контакт из разъёма ON/OFF. Фиолетовой стрелкой показан пример подключения.
| | <!--T:3--> |
| | {| class="wikitable" |
| | ! [[File:Watchdog_disable_wb5.png|550px|thumb|left|Wiren Board 5]] |
| | ! [[File:Watchdog_disable_wb6.png|550px|thumb|center|Wiren Board 6]] |
| | |} |
|
| |
|
| <gallery mode="packed" heights="200px" caption="Способы отключения аппаратного таймера в разных версиях контроллера"> | | <!--T:4--> |
| Image: Wiren Board EC LED1.jpg | Wiren Board 7.4 и новее. Зажать кнопку B1 или запаять перемычку Watchdog OFF
| | На иллюстрациях показано, какие выводы необходимо соединить для этого в контроллерах Wiren Board 5 и WirenBoard 6. Нужный вывод разъема ON/OFF отмечен красной стрелкой, выводы GND (можно использовать любой) отмечены красными кружками. Фиолетовой линией показан пример соединения. |
| 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>.
| |
|
| |
|
| Ещё этот сервис сообщает о нормальной работе операционной системы аппаратному таймеру через сброс его счётчика. А пока сервис не запущен в первые секунды включения контроллера — счётчик аппаратного таймера сбрасывает загрузчик.
| | </translate> |
| | |
| === Конфигурирование ===
| |
| По умолчанию отслеживается только 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> | |
| | |
| Перезагрузки должны прекратиться.
| |
Сторожевой таймер (англ. watchdog) — аппаратно реализованная схема контроля за зависанием системы.
Представляет собой отдельную микросхему-компаратор, ведущую отсчёт времени. Если таймер досчитывает до заданного времени (около 15 секунд), происходит перезагрузка по питанию (выключение одной из линий питания на 3-4 секунды). В нормальном режиме таймер периодически сбрасывается подачей переменного сигнала, подаваемого на вход таймера с одного из выводов GPIO процессора. Этот GPIO контролируется специальным сервисом Linux.
В Linux интерфейс сторожевого таймера /dev/watchdog1, конфигурация сервиса хранится в файле /etc/watchdog.conf.
Отключение сторожевого таймера
Сторожевой таймер иногда требуется отключить:
- Если вам нужно полностью выключить контроллер, не снимая с него питание (например, по событию от источника бесперебойного питания) - если сторожевой таймер будет работать, то контроллер даже после команды
halt
через некоторое время перезагрузится по питанию, и начнёт работать. При отключенном сторожевом таймере возобновление работы контроллера будет возможно только при ручном сбросе питания контроллера.
- Если вы неправильно настроили одну из важных служб контроллера, и он ушёл в циклическую перезагрузку: из-за неправильной конфигурации службы не будут запускаться, а сторожевой таймер будет замечать их отсутствие, и перезапускать контроллер.
Отключение сторожевого таймера аппаратным способом
Для отключения требуется разобрать корпус контроллера и соединить один из выводов разъема ON/OFF с GND.
На иллюстрациях показано, какие выводы необходимо соединить для этого в контроллерах Wiren Board 5 и WirenBoard 6. Нужный вывод разъема ON/OFF отмечен красной стрелкой, выводы GND (можно использовать любой) отмечены красными кружками. Фиолетовой линией показан пример соединения.