Перейти к содержимому

Как проверить аппаратный watchdog на centos 7

  • автор:

Watchdog в контроллерах 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. Фиолетовой стрелкой показан пример подключения.

    Способы отключения аппаратного таймера в разных версиях контроллера

Wiren Board 7.4. Зажать кнопку B1 или запаять перемычку Watchdog OFF

Wiren Board 7.2. Запаять перемычку Watchdog OFF

Wiren Board 6.8. Подключить WD к +5V

Wiren Board 6.7. Подключить WD к GND

Wiren Board 6. Подключить контакт ON/OFF к GND

Wiren Board 5. Подключить контакт ON/OFF к GND

Программный

Как устроен

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

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

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

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

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

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

  1. Подключитесь к контроллеру по SSH.
  2. Остановите сервис:

systemctl stop watchdog
nano /etc/watchdog.conf
# Test if vital daemons are running pidfile = /var/run/sshd.pid pidfile = /var/run/nginx.pid
systemctl start watchdog

Отключение

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

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

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

systemctl stop watchdog
systemctl start watchdog

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

Установка и настройка Watchdog

Сторожевой таймер (Watchdog timer) — аппаратно реализованная схема контроля над зависанием системы. Представляет собой таймер, который периодически сбрасывается контролируемой системой. Если сброса не произошло в течение некоторого интервала времени, происходит принудительная перезагрузка системы. В некоторых случаях сторожевой таймер может посылать системе сигнал на перезагрузку («мягкая» перезагрузка), в других же — перезагрузка происходит аппаратно (замыканием сигнального провода RST или подобного ему).

Установка в Linux Ubuntu/Debian:

sudo apt-get install watchdog 

Список некоторых файлов которые будут установлены в систему:

  • /etc/init.d/watchdog
  • /etc/init.d/wd_keepalive
  • /etc/watchdog.conf
  • /etc/default/watchdog
  • /dev/watchdog
  • /usr/sbin/watchdog
  • /usr/sbin/wd_identify
  • /usr/sbin/wd_keepalive
  • /usr/share/doc/watchdog/
  • /usr/share/man/man5/watchdog.conf.5.gz
  • /usr/share/man/man8/watchdog.8.gz
  • /usr/share/man/man8/wd_identify.8.gz
  • /usr/share/man/man8/wd_keepalive.8.gz

Возможные параметры конфига /etc/watchdog.conf:

interval = 

Интервал между двумя операциями записи в watchdog устройство. Значение по умолчанию составляет 10 секунд. Интервал больше минуты может быть использованы только параметром -f из командной строки.

logtick = 

Если пишутся логи, можно пропускать запись событий каждое указанно количество интервалов. Например если logtick = 60 и interval 10, получится 600 секунд, то есть в логируемый файл будет добавляться запись не чаще одного раза в 10 минут.

max-load-1 = 

Максимально разрешенное значение загрузки системы за 1 минуту при превышении которого система перезагрузится. 0 — отключает проверку.

max-load-5 = 

Максимально разрешенное значение загрузки системы за 5 минуту при превышении которого система перезагрузится. 0 — отключает проверку.

max-load-15 = 

Максимально разрешенное значение загрузки системы за 15 минуту при превышении которого система перезагрузится. 0 — отключает проверку.

min-memory = 

Установка минимального количества виртуальной памяти которое должно быть свободно. 0 — проверка отключено.

max-temperature = 

Установка максимально разрешенной температуры.

watchdog-device = 

Установка имени устройства.

temperature-device = 

Установка имени устройства температуры.

file = 

Файловый режим, проверка файлов.

change = 

Интервал времени для файлового режима.

pidfile = 

Имя pid файла. Можно добавить отслеживаемый процесс, например «pidfile = /var/run/apache2.pid». В случае невозможности запуска процесса watchdog будет постоянно перезагружать систему.

ping = 

Режим пинга, для проверки сетевых соединений. Опция может быть использована более одного раза.

interface = 

Установка имени сетевого интерфейса.

test-binary = 

Выполнение пользовательского теста.

test-timeout = 

Тест может выполняться указанное количество секунд. 0 — неограничено.

repair-binary = 

Выполняется при невозможности перезагрузки системы.

admin = 

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

realtime = 

Yes для невозможности выгрузки watchdog из оперативной памяти.

priority = 

Установка приоритета для режима realtime.

Пример настройки с Intel TCO Watchog Timer.
Загрузка модуля:

sudo modprobe iTCO_wdt 

В /etc/watchdog.conf должно быть раскоментировано/добавлено:

watchdog-device = /dev/watchdog interval = 10 

В /etc/default/watchdog указать имя модуля:

watchdog_module="iTCO_wdt" 

Можно добавить опцию отладки чтобы в syslog журнал писалась отладочная информация:

watchdog_options="-v" 
sudo /etc/init.d/watchdog restart 

Мониторить в реальном времени записи syslog можно командой:

tail -f /var/log/syslog 

watchdog apache linux

apache watchdog

Иногда бывает apache падает по той или иной причине, не всегда есть возможность оперативно проверить и подключится что случилось, в такие моменты хорошо подойдет watchdog apache.

Вобщем накатал простой скрипт передергивания apache (watchdog)если он отдает ответ отличный от 200:

Watchdog (сторожевой таймер) в Linux

Watchdog (сторожевой таймер) — аппаратно реализованная схема контроля над зависанием системы.

Сторожевые таймеры используются в системах, которые должны работать без надзора человека. Такие системы должны быть само восстанавливающимися без участия оператора.

В контроллерах JetHome JetHub на базе процессоров Amlogic поддерживается драйвер аппаратного watchdog meson_wdt .

Проверка устройств

При корректно запущенном модулей watchdog в системе /dev должны быть видны устройства /dev/watchdog и /dev/watchdog0 :

$ ls -l /dev/watchdog* crw-rw---- 1 root root 10, 130 2019-01-01 00:00 /dev/watchdog crw-rw---- 1 root root 10, 130 2019-01-01 00:00 /dev/watchdog0

Установка сервиса Watchdog

В прошивках начиная с версии Armbian 22.02 watchdog предустановлен, ручная установка не требуется.

Для установки сервиса watchdog выполните следующие команды:

sudo apt-get update sudo apt-get install watchdog

Создайте папку для лог-файлов watchdog:

sudo mkdir -p /var/log/watchdog

Проверьте настройки для сервиса в файле /etc/default/watchdog :

# Start watchdog at boot time? 0 or 1 run_watchdog=1 # Start wd_keepalive after stopping watchdog? 0 or 1 run_wd_keepalive=1 # Load module before starting watchdog watchdog_module="none" # Specify additional watchdog options here (see manpage). watchdog_options="-s -v -c /etc/watchdog.conf" 

Конфигурационные файлы

Внесите необходимые изменения в конфигурационный файл /etc/watchdog.conf :

  • Раскомментируйте использование устройства /dev/watchdog (иначе сервис watchdog не будет использовать аппаратный таймер для перезагрузки контроллера).
  • Установите необходимые проверки и таймауты.

Ниже приведен пример конфигурационного файла, с установленным таймаутом 15 секунд на зависание:

Примечание

Значение watchdog-timeout определяет через какое время после аварии сервиса watchdog аппаратный таймер перезагрузит контроллер.

$ cat /etc/watchdog.conf #ping = 172.31.14.1 #ping = 172.26.1.255 #interface = eth0 #file = /var/log/messages #change = 1407 # Uncomment to enable test. Setting one of these values to '0' disables it. # These values will hopefully never reboot your machine during normal use # (if your machine is really hung, the loadavg will go much higher than 25) #max-load-1 = 24 #max-load-5 = 18 #max-load-15 = 12 # Note that this is the number of pages! # To get the real size, check how large the pagesize is on your machine. #min-memory = 1 #allocatable-memory = 1 #repair-binary = /usr/sbin/repair #repair-timeout = 60 #test-binary = #test-timeout = 60 # The retry-timeout and repair limit are used to handle errors in a more robust # manner. Errors must persist for longer than retry-timeout to action a repair # or reboot, and if repair-maximum attempts are made without the test passing a # reboot is initiated anyway. #retry-timeout = 60 #repair-maximum = 1 watchdog-device = /dev/watchdog # Defaults compiled into the binary #temperature-sensor = #max-temperature = 90 # Defaults compiled into the binary #admin = root #interval = 1 #logtick = 1 #log-dir = /var/log/watchdog # This greatly decreases the chance that watchdog won't be scheduled before # your machine is really loaded realtime = yes priority = 1 # Check if rsyslogd is still running by enabling the following line #pidfile = /var/run/rsyslogd.pid watchdog-timeout = 15 

Автозапуск и проверка сервиса

Для включения автозапуска сервиса выполните следующие команды:

sudo systemctl enable watchdog sudo systemctl start watchdog

Проверка работоспособности сервиса:

service watchdog status
● watchdog.service - watchdog daemon Loaded: loaded (/lib/systemd/system/watchdog.service; enabled; vendor pres> Active: active (running) since Mon 2022-02-21 17:29:24 UTC; 17h ago Process: 2718 ExecStartPre=/bin/sh -c [ -z "$watchdog_module>" ] || [ "$w> Process: 2720 ExecStart=/bin/sh -c [ $run_watchdog != 1 ] || exec /usr/sbin> Main PID: 2722 (watchdog) Tasks: 1 (limit: 977) Memory: 516.0K CPU: 3min 33.528s CGroup: /system.slice/watchdog.service └─2722 /usr/sbin/watchdog -s -v -c /etc/watchdog.conf Feb 22 10:52:23 jethubj100 watchdog[2722]: still alive after 62076 interval(s) Feb 22 10:52:24 jethubj100 watchdog[2722]: still alive after 62077 interval(s) Feb 22 10:52:25 jethubj100 watchdog[2722]: still alive after 62078 interval(s) Feb 22 10:52:26 jethubj100 watchdog[2722]: still alive after 62079 interval(s) Feb 22 10:52:27 jethubj100 watchdog[2722]: still alive after 62080 interval(s) Feb 22 10:52:28 jethubj100 watchdog[2722]: still alive after 62081 interval(s) Feb 22 10:52:29 jethubj100 watchdog[2722]: still alive after 62082 interval(s) 

Настроенный и запущенный сервис watchdog постоянно сбрасывает аппаратный сторожевой таймер.

Если он не сможет этого сделать (например, в случае если зависла система или наступило любое другое настроенное в конфигурации условие), таймер сработает и перезагрузит контроллер.

Проверка сторожевого таймера

Будьте осторожны: команды в этом разделе приводят к панике ядра и полной остановке работы контроллера.

Используйте их только в тестовой среде!

Следующая команда приводит к искусственному сбою ядра linux. Если watchdog работает правильно, то он автоматически перезагрузит систему после таймаута:

echo c > /proc/sysrq-trigger
[63168.053150] sysrq: Trigger a crash [63168.053204] Kernel panic - not syncing: sysrq triggered crash [63168.056648] CPU: 3 PID: 65544 Comm: bash Not tainted 5.15.24-meson64 #trunk.0045.jethome.0 [63168.064838] Hardware name: JetHome JetHub J100 (DT) [63168.069670] Call trace: [63168.072082] dump_backtrace+0x0/0x200 [63168.075706] show_stack+0x18/0x68 [63168.078982] dump_stack_lvl+0x68/0x84 [63168.082605] dump_stack+0x18/0x34 [63168.085882] panic+0x164/0x324 [63168.088901] sysrq_handle_crash+0x1c/0x20 [63168.092869] __handle_sysrq+0x8c/0x160 [63168.096577] write_sysrq_trigger+0x88/0x120 [63168.100719] proc_reg_write+0xac/0xf8 [63168.104340] vfs_write+0xbc/0x398 [63168.107618] ksys_write+0x68/0xf0 [63168.110895] __arm64_sys_write+0x1c/0x28 [63168.114776] invoke_syscall+0x44/0x108 [63168.118485] el0_svc_common.constprop.3+0x94/0xf8 [63168.123143] do_el0_svc+0x24/0x88 [63168.126420] el0_svc+0x20/0x50 [63168.129439] el0t_64_sync_handler+0x90/0xb8 [63168.133579] el0t_64_sync+0x180/0x184 [63168.137206] SMP: stopping secondary CPUs [63168.141091] Kernel Offset: disabled [63168.144533] CPU features: 0x00001001,00000846 [63168.148845] Memory Limit: none [63168.151871] ---[ end Kernel panic - not syncing: sysrq triggered crash ]--- AXG:BL1:d1dbf2:a4926f;FEAT:E0DC318C:2000;POC:F;EMMC:0;READ:0;0.0;CHK:0; sdio debug board detected TE: 33151 

Пауза 15 секунд (в соответствии с значением watchdog_timeout в конфигурационном файле), далее:

BL2 Built : 10:43:22, May 26 2021. axg g28b9431 - jenkins@walle02-sh set vcck to 1100 mv set vddee to 950 mv Board ID = 9 CPU clk: 1200MHz DDR low power enabled DDR3 chl: Rank0 16bit @ 912MHz bist_test rank: 0 1b 02 34 24 0b 3d 17 00 2f 27 0e 40 00 00 00 00 00 00 00 00 00 00 00 00 761 - PASS Rank0: 1024MB(auto)-2T-13 AddrBus test pass! eMMC boot @ 0 sw8 s storage init finish emmc switch 3 ok Authentication key not yet programmed get rpmb counter error 0x00000007 emmc switch 0 ok Load FIP TMP HDR from eMMC, src: 0x0000c200, des: 0x05100000, size: 0x00004000, part: 0 0001c000Load BL31 from eMMC, src: 0x0001c200, des: 0x05104000, size: 0x0002ac00, part: 0 bl2z: ptr: 05127358, size: 00001e18 Load FIP HDR from eMMC, src: 0x0000c200, des: 0x01700000, size: 0x00004000, part: 0 Load BL3x from eMMC, src: 0x00010200, des: 0x01704000, size: 0x0008e400, part: 0 NOTICE: BL31: v1.3(release):110e239 NOTICE: BL31: Built : 19:07:23, Jul 2 2018 NOTICE: BL31: AXG normal boot! NOTICE: BL31: BL33 decompress pass [Image: axg_v1.1.3326-d0bacc8 2018-07-05 11:21:34 jenkins@walle02-sh] OPS=0x43 25 0b 43 00 88 fc 1a 07 8d 24 0c 3a b2 65 16 59 bl30:axg ver: 9 mode: 0 bl30:axg thermal0 [0.015862 Inits done] secure task start! high task start! low task start! ERROR: Error initializing runtime service opteed_fast U-Boot 2022.01-armbian (Feb 08 2022 - 06:07:00 +0000) jethubj100

© Copyright 2023, JetHome. Обновлено: 26.01.2023 16:59:03 UTC.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *