Что такое WatchDog и для чего он нужен

WatchDog в переводе с английского — сторожевой пес. Сегодня так называют сторожевые таймеры, основная задача которых — своевременный перезапуск «зависшего» оборудования с целью восстановления его работоспособности. Отлично зарекомендовало себя устройство под названием IP WatchDog из линейки продуктов компании HW group (Чешская Республика). Поставляется оно в двух вариантах исполнения — промышленная версия в корпусе для монтажа на стандартную DIN-рейку IP WatchDog HWg-WR02a и облегченный вариант IP WatchDog Lite. Подробнее об этих устройствах, а также о том, каким должен быть оптимальный WatchDog и методы определения работоспособности оборудования, рассказывает эта статья.
Не секрет, что высокие технологии в настоящее время охватывают все новые и новые сферы жизни человека. Еще в середине прошлого века трудно было себе представить тот рывок, который техника совершила за последние 20 лет.
Сегодня никого не удивить электронными терминалами по приему платежей, банкоматами, комплексами бытовой автоматики («Умный дом»), сложными автономными системами видеонаблюдения и т.п.
Список можно продолжать бесконечно долго, и все равно невозможно охватить сразу все области интеграции сложной электронно-вычислительной техники в современном обществе. Эти технологии делают нашу жизнь проще, комфортнее и, несомненно, гораздо интереснее.
К сожалению, несмотря на стремление к технологическому совершенству, создать что-либо совершенно надежное невозможно в силу объективных причин. Человек по природе своей несовершенен, следовательно, и созданные им приспособления не всегда действуют так, как хотелось бы. Это касается абсолютно любой сферы деятельности, включая сложнейшие стратегические комплексы и космическую отрасль.
Ведь не секрет, что чем сложнее устройство, чем больше элементов оно в себе содержит, тем выше риск возникновения непредвиденного сбоя. И дело здесь вовсе не в нежелании инженеров и программистов получить безупречный результат – просто невозможно предусмотреть абсолютно все ситуации.
Да и, кроме того, есть целый ряд причин, защиты от которых просто может не быть, либо она будет неэффективна. Никто не застрахован от внезапных перепадов напряжения питания, даже, несмотря на целый комплекс защитных устройств на этот случай, от случайных статических разрядов, от умышленных вредоносных действий недоброжелателей (например, хакерские атаки на сервера в интернете). Последствия таких событий, наверное, известны всем.
На практике, попав во внештатную ситуацию, оборудование ведет себя малопредсказуемо – происходят различные сбои, устройство «зависает», начинает «глючить», одним словом перестает корректно выполнять свои функции. Инженеры и программисты постоянно борются с подобными явлениями, регулярно обновляя программное обеспечение своих продуктов и совершенствуя их аппаратную часть. Но одно дело, когда «завис» или показал «синий экран смерти» домашний компьютер или ноутбук, и совсем другое дело – когда перестал функционировать тот же банкомат, подстанция сотовой связи, мощный сервер в центре обработки данных или сетевая камера видеонаблюдения.
В первом случае все решается простым нажатием кнопки «Сброс» или кратковременным выключением прибора из сети, а со вторым случаем все сложнее. А что, если тот самый банкомат или видеокамера находятся за многие сотни или даже тысячи километров от администратора системы?
Выход напрашивается сам собой – приставить к каждому устройству персонального смотрителя, который будет неустанно следить за его работоспособностью и вовремя нажимать нужные кнопки в случае сбоя. Но не все так просто.
Во-первых, не стоит забывать о пресловутом «человеческом факторе», как мы уже говорили человек – существо несовершенное, может и отлучиться куда-нибудь, отвлечься или просто заснуть на посту.
Во-вторых, порой, финансовые затраты на персонального сторожа для каждого устройства будут обходиться гораздо дороже самого этого устройства, что весьма расточительно, а в комплексе с первым утверждением вообще малоэффективно.
Есть еще способ. Практически во все современные устройства, работающие под управлением контроллера (процессора) и содержащие управляющую микропрограмму или операционную систему, встраиваются т.н. «Сторожевые таймеры» (англ. WatchDog – Сторожевой Пёс).
По своей сути они могут быть как программными, так и аппаратными, встроенными в микроконтроллер или иную микросхему внутри устройства.
Основная задача таких таймеров – своевременный перезапуск «зависшего» оборудования с целью восстановления его работоспособности.
Если в течение определенного времени или определенного в программе числа циклов операционная система устройства или порт микроконтроллера не отвечают на запросы таймера, устройству посылается команда сброса и перезагрузки.
Несомненно, это весьма удобно и не требует таких больших затрат, как содержание штата сотрудников, следящих за каждым прибором, но и тут есть большой минус. Те сторожевые таймеры, про которые велась речь выше – встроены непосредственно в логику контролируемого прибора. И в этом их основной недостаток. При определенных условиях эти таймеры, независимо от того, аппаратно они реализованы или программно, могут «зависнуть» вместе со всем устройством. И тогда польза такого электронного сторожа будет нулевой – его самого придется сбрасывать вместе со всей начинкой подконтрольного прибора.
Есть еще одно условие – иногда подачи только сигнала «Сброс» оказывается недостаточно, и для полного восстановления работоспособности устройства его необходимо на некоторое время полностью обесточить. Например, если по какой-то причине сработала защита встроенного в сетевую видеокамеру преобразователя питания? Устройство просто выключится, и сторожевой таймер тоже, следовательно, выходом из положения будет только кратковременное прекращение подачи напряжения питания на камеру с дальнейшим его восстановлением.
Итак, каким же должен быть оптимальный WatchDog?
Он должен быть независимым от контролируемого устройства, автономным, надежным, гибко программируемым и, самое главное, с возможностью дистанционного управления для того, чтобы оператор или администратор имели возможность при малейшем подозрении на неправильную работу контролируемого оборудования принять меры по исправлению ситуации. Так есть ли оптимальное решение? Конечно же, есть.
В линейке продуктов компании HW group (Чешская Республика) есть интересное устройство под названием IP WatchDog.
Поставляется оно в двух вариантах исполнения — прибор промышленного применения в корпусе, предназначенном для монтажа на стандартную DIN-рейку IP WatchDog HWg-WR02a и облегченный вариант IP WatchDog Lite.
Как следует из названия, оба устройства позволяют контролировать работоспособность различного сетевого оборудования, такого как IP-видеокамеры, видеорегистраторы, маршрутизаторы, точки доступа WiFi, персональные компьютеры и ноутбуки, серверы, телекоммуникационные стойки и т.п.

IP WatchDog HWg-WR02a так же дополнительно оснащен разъемом последовательного порта RS-232, что позволяет использовать его для контроля оборудования, не оснащенного Ethernet-портами — запрограммированное должным образом устройство будет ожидать периодической передачи от подконтрольного оборудования определенной последовательности символов (ASCII, HEX, DEC), передающихся через порт RS-232.
Устройства полностью автономны и не требуют какого-либо дополнительного программного обеспечения для управления. Достаточно один раз сделать все необходимые настройки через Web-интерфейс в любом удобном интернет-браузере — поддерживаются как Internet Explorer, так и Mozilla Firefox, Google Chrome, Safari, Opera.
Как IP WatchDog HWg-WR02a, так и IP WatchDog Lite имеют два независимых канала для мониторинга состояния подключенного к ним оборудования и два независимых выхода контактов реле, способных коммутировать любую нагрузку с напряжением питания до 230В при токе до 16А. Это означает, что данные устройства могут использоваться не только для сброса контролируемого оборудования, но и для управления питанием различных приборов — например, подключить резервный сервер или маршрутизатор в случае отказа основного.
Сторожевые таймеры производства HW group используют 5 различных механизмов для определения работоспособности оборудования, что делает эти устройства очень гибкими и дает широкие возможности по внедрению их в различные системы, такие как сетевое видеонаблюдение, серверные стойки, телекоммуникации, медицинские приборы, охранно-пожарное оборудование, Web-сервера.
И даже оборудование, не оснащенное сетевым интерфейсом, но имеющее стандартный последовательный порт RS-232 (COM-порт) может быть с легкостью использовано совместно с IP WatchDog Hwg-WR02a. Кроме того, оператор или администратор всегда могут оперативно вмешаться в работу устройства посредством локальной сети или удаленно, через интернет.
Помимо мониторинга оборудования IP WatchDog ведет свой собственный журнал событий.
Вот список всех методов определения работоспособности оборудования, используемых в сторожевых таймерах HW group:
Ping Push: В этом режиме IP WatchDog через определенные интервалы времени отправляет на заданный IP-адрес запросы PING, тем самым определяя, откликается ли на них контролируемое устройство. В случае, если отклик от устройства не был получен, сработают контакты реле и, к примеру, будет произведена его перезагрузка. Данный метод очень удобен для мониторинга состояния сетевых видеокамер, маршрутизаторов, сетевых коммутаторов и т.п.
Ping Request: В отличии от предыдущего режима, IP WatchDog не посылает запросы PING, а ожидает таковых от контролируемого устройства. Хорошо подходит для использования в серверных и телекоммуникационных стойках, на вышках сотовой связи.
Web Push: Эта функция доступна только для IP WatchDog HWg-WR02a. Ее суть заключается в том, что сторожевой таймер периодически запрашивает определенную Web-страницу с указанного пользователем адреса. Это очень удобный метод контроля работоспособности Web-серверов – при отсутствии или недоступности запрашиваемой страницы (известная всем «Ошибка 404») сервер будет своевременно перезапущен.
Web Request: В данном режиме IP WatchDog ожидает от контролируемого устройства запроса своей внутренней Web-страницы. Если страница не будет запрошена в течение определяемого пользователем интервала времени – устройство будет перезапущено. Метод так же удобен для контроля состояния Web-серверов. Доступна эта функция только в обновленном IP WatchDog HWg-WR02a.
RS232 Rx: Как уже упоминалось выше, в этом режиме сторожевой таймер будет ожидать от подключенного к нему устройства определенную последовательность символов, переданную посредством стандартного порта RS-232.
Аппаратный «watchdog» или незаменимый помощник в борьбе с зависанием
В одной компании было много терминалов, и одна из неблагодарных задач для техподдержки — ездить по точкам и перезапускать операционную систему внутри терминалов. Было решено бросить вызов этой проблеме в виде разработки аппаратного сторожевого таймера.
В итоге мы получили устройство, которое подключается к расширительному спаренному USB-разъему на материнской плате.

Данное устройство имеет следующие возможности:
- Имитация нажатия кнопок POWER и RESET;
- Управление питанием USB-устройством (при условии, что у него нет отдельного источника);
- Управление гальванически развязанной контактной группой (реле). Можно поставить в разрез цепи питания;
- Индикаторные светодиоды (одним можно управлять, второй показывает режимы работы).
Алгоритм работы прост: внутри находятся два настраиваемых таймера, которые постоянно отсчитывают заданное время, по истечению которого имитируется нажатие соответствующих кнопок (POWER и RESET). Чтобы предотвратить случайную перезагрузку, необходимо периодически послать команду сброса таймера.
Лучше, чтобы за процедуру сброса таймеров отвечало целевое приложение, а не стороннее или системное (Cron, служба расписаний) по причине того, что вероятность сбоя в системе меньше, чем в приложении (хотя, у кого как).
Обмен информацией аналогичен консольному.
| команда | Описание | Пример |
|---|---|---|
| help | Краткая справка по командам | help |
| LED1 | Управление светодиодом, по умолчанию выключен | LED1 ON LED1 OFF |
| RELAY | Управление реле, по умолчанию включено | RELAY ON RELAY OFF |
| KEY1 | Имитация нажатия кнопки 1, по умолчанию не нажата | KEY1 ON KEY1 OFF |
| KEY2 | Имитация нажатия кнопки 2, по умолчанию не нажата | KEY2 ON KEY2 OFF |
| C1 | Управление таймером 1, связанным с кнопкой 1. Установка времени в секундах, максимальное значение 32767. Для отключения функции таймера, необходимо задать время равное 0. |
C1 RES C1 SET 60 C1 SET 0 |
| C2 | Управление таймером 2, связанным с кнопкой 2. Установка времени в секундах, максимальное значение 32767. Для отключения функции таймера, необходимо задать время равное 0. |
C2 RES C2 SET 60 C2 SET 0 |
| USB | Управление питанием USB, по умолчанию включено | USB ON USB OFF |
В случае удачного выполнения команды возвращает «OK».
В случае некорректных данных возвращает «ERROR».
Признаком конца строки служит символ возврата каретки «\r». Также поддерживается режим «\r\n».

Устройство выполнено на базе контроллера STM32F103CA с аппаратной поддержкой USB. Библиотека работы с USB версии V4.0.0. Напряжение работы 3.3В получаем с помощью линейного стабилизатора из 5В на USB. Во всех управляющих цепях используются транзисторы в ключевом режиме. Также не забываем про защитный диод от токов самоиндукции в катушки реле (в моем случае он оказался встроенным).
Windows просыпается сам. Как исправить?
После обновления Windows, или после установки новых программ, или чего-то еще, Ваш компьютер или ноутбук начинает сам просыпаться (выходить из сна, режима гибернации). Такое у меня на практике было очень часто и я научился с этим бороться. В этой статье рассмотрим примеры как запретить Windows автоматически выходить из состояния Sleep (hibernate).
Примеры ниже показаны для Windows 10, но на ранних версиях все делает аналогичным образом.
Причин почему Виндовс может просыпаться много. Обычно, это способность периферийных устройств будить Windows. Также это может быть автоматическое обслуживание Windows или обновлениями системы/программ. Рассмотрим все возможные причины ниже.
- Причина 1: Настройки BIOS
- Причина 2: Будят устройства (мышь, клава)
- Причина 3: Будят запланированные задачи (waketimers)
- Узнаем какая команда вывела комп из сна
- Отключаем возможность вывода из сна у конкретной задачи (waketimers)
- Отключаем возможность вывода из сна для всех задач (waketimers)
- Причина 4: Будит система обслуживания Windows
- powercfg (утилита командной строки)
Причина 1: Настройки BIOS
Нужно проверить настройки BIOS, связанные с авто-пробуждением компьютера через внешние устройства. Это может быть:
- Функционал WOL (Wake on LAN)
- Настройки пробуждения при движении мыши. Бывают глюки с неподвижно стоящими беспроводными мышками.
- Настройки пробуждения при нажатие на клавиш клавиатуры: Power On By Keyboard и Power On By Mouse.
Все эти функции желательно отключить. Сказать где именно это делается в BIOS сложно, потому что версии BIOS отличаются.
Причина 2: Будят устройства (мышь, клава)
Заходим в Device Manager (Диспетчер устройств) и смотрим параметры у: Мыши, Клавиатуры и Сетевых адаптеров (Network adapters). Убираем у них возможность будить компьютер (Allow this device to wake the computer).

Чтобы отключить пробуждение компьютера при получении пакета WOL сетевой картой, нужно в свойствах сетевой карты снять опцию Only allow a magic packet to wake the computer.

Причина 3: Будят запланированные задачи (waketimers)
Разные программы (утилиты) могут создавать задачи, которые выполняются в определенное время. Такие задачи могут будить компьютер (ноутбук). Например, задача проверки на вирусы, или установка обновлений какой-либо программы, или оптимизация windows.
Запланированных задач в Windows очень много, но не все из них будят компьютер, однако некоторые могут это делать.
Для решения этой причины нужно:
- Выяснить какая задача вывела компьютер из режима сна (гибернации). Посмотреть это можно в системном журнале Windows Events (лог событий Windows).
- Отключить возможность выводить из сна у конкретной задачи. Делается это в Task Scheduler (планировщик заданий).
Узнаем какая команда вывела комп из сна
- Жмем Windows + R > eventvwr.msc
- Или Control Panel > System and Security > Administrative tools > View event logs

Заходим в ветку Windows Logs > System и ищем ближайшую информацию о событии где в колонке Sourсe указано Power-Troubleshooter.

В этом примере, мой комп проснулся из-за нажатия мной кнопки питания (Power Button). Возможные варианты Wake Source (источников пробуждения):
- Кнопка питания — когда вы руками включаете компьютер соответствующей кнопкой.
- Устройства ввода HID (может обозначаться иначе, обычно содержит аббревиатуру HID) — система проснулась от устройства ввода (клавиатура, мышь).
- Сетевой адаптер — сетевая карта настроена так, что может пробуждать компьютер (ноутбук) при входящих соединениях.
- Таймер — говорит о том, что запланированная задача (в планировщике заданий) вывела Windows из сна.
- Крышка ноутбука (может обозначаться по-разному, например «Устройство USB Root Hub») — говорит о том, что крышка была открыта.
- Нет данных — информации, кроме времени выхода из сна, нет. Такие пункты встречаются на ноутбуках очень часто (т.е. это штатная ситуация). Обычно другие действия описанные в этой статье успешно прекращают авто-пробуждение.
Пример пробуждения по таймеру (по задаче)

Тут мы видим что из сна вывел таймер, а конкретно задача «NT TASK\Microsoft\Windows\UpdateOrchestrator\Reboot». Запоминаем этот путь.
Отключаем возможность вывода из сна у конкретной задачи (waketimers)
Откроем Task Scheduler (Планировщик задач):
- Жмет Windows + R > taskschd.msc
- Или Control Panel > System and Security > Administrative tools > Schedule tasks
Переходим в путь, который видели в системном журнале: «Microsoft\Windows\UpdateOrchestrator\Reboot»:

Далее, делаем двойной клик по событию (чтобы открыть настройки события) и переходим во вкладку «Условия» и снимите галочку с пункта «Пробуждать компьютер для выполнения задачи«:

Все, задача больше не будет будить комп!
Отключаем возможность вывода из сна для всех задач (waketimers)
Можно разом запретить всем задачам (таймерам) пробуждать комп, чтобы не отключать эту опцию для отдельной задачи.
Для этого нужно зайти в Плане управления питанием, там есть опция Разрешить/Запретить таймеры пробуждения.
- Открываем настройки Электропитания:
- Жмём Win+R и в открывшееся окно вводим powercfg.cpl
- Или Control Panel > System and Security > Power Options

Причина 4: Будит система обслуживания Windows
Когда пробуждение компьютера (ноутбука) происходит ночью (в 3 часа ночи), то часто в этом виновата «Система обслуживания Windows». Она будит компьютер для выполнения задач по обслуживанию системы (дефрагментация, проверка дисков, установка обновлений и т.п.).
Чтобы проверить, может ли эта система будить Windows, откройте следующий элемент панели управления:
Control Panel > System and Security > Security and Maintenance > Change maintenance settings
Снимите галочку с «Allow scheduled maintenance to wake up my computer at the scheduled time» (Разрешить задаче обслуживания пробуждать мой компьютер в запланированное время).
Или можно изменить время на часы когда компьютер включен.


powercfg (утилита командной строки)
Смотреть и управлять пробуждением компьютера можно через Командную строку. Это удобнее, чем лазить по настройкам и искать какие галочки нужно включить/отключить. Рассмотрим команды, которые управляют пробуждением компьютера.
Чтобы открыть Командную строку: жмет Windows + R, вводим cmd и жмем OK (Enter).

Какое событие/устройство разбудило компьютер, можно увидеть через команду:

Кому разрешено будить компьютер (список устройств) можно получить так:

Обычно этот список включает:
- Клавиатуру (Standard PS/2 Keyboard )
- Мышь (HID-compliant mouse)
- Сетевые карты (в том числе Wi-Fi)
Полный список системных устройств, которые могут выводить Компьютер из спящего режима:

Отключить возможность пробуждения компьютера для отдельного устройства можно из командной строки:
То же самое можно сделать из графического интерфейса диспетчера устройств (devmgmt.msc). Смотрите «Причина 2» выше.
Отключить возможность пробуждения Windows для всех устройств сразу можно следующей командой (сценарием):
Список заданий планировщика задач, которые могут разбудить компьютер можно получить так:

В этот примере виновато обновление программы Windows Media Center. Чтобы отключить возможность пробуждения для этого задания:
- Откройте Task Scheduler (Планировщик задач). Windows + R > taskschd.msc .
- Найдите нужно задание. Путь к заданию указан в результатах команды. В этом примере это: Microsoft > Windows > Media Center > mcupdate_scheduled .
- Откройте задание (двойной клик по нему) и на вкладке Conditions снимите флажок Wake the computer to run this task.
Подробнее об управлении планировщиком задач смотрите выше в «Причина 3».