RSS
people

Watchdog для компьютера

Наконец-то, сбылось то, чего я обещал. Собрал-таки и запрограммил я Watchdog для своего сервера. Чем и спешу поделиться с общественностью.

Так что, если кому надо следить за тем, чтобы его компьютер или сервер не завис, читаем далее.

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

В общем вот вид со стороны основных деталей:

PCWatchdog Parts side
PCWatchdog Parts side

Это — с обратной:

PCWatchdog Bottom side
PCWatchdog Bottom side

А это я его уже прикрутил к корзине с дисками в сам сервер.

PCWatchdog in PC
PCWatchdog in PC

Пока что он у меня в режиме тестирования, т.е. к кнопке ресета я его пока что не подключил.

Вот. Ну глянем на схемку сначала. В принципе ничего особенного — обычная мега 128-я, FTDI-шный USB-Serial конвертер, и релюшка. Про реле хотел бы сказать немного.Подключение реле я сделал по уроку DI-HALT'а, доступному тут. Так оно выглядит у меня:

Rellay shematic
Rellay shematic

Он там подробно описал, зачем вокруг реле столько лишних деталей понапихано.

В принципе — работает. Но только, если подключено к материнской плате на прямую, или от хаба со своим питанием. От моего ноутбука реле не срабатывает, хотя и щелкает. Видимо, надо параметры конденсатора подбирать для каждого конкретного случая.

Ну вот собственно и все со схемой. Конечно  мега 128-я для такой задачи более чем избыточна, поэтому я попытаюсь переделать прошивку под мегу 162, так как она есть у меня в распаянном виде. Но не обещаю, что это будет скоро.

В кратце расскажу о софте. Прошивка меги не сильно сложная. Слушает UART на предмет входящих пакетов, разбирает их по командам, и если приходит команда WD_CMD_TRIGGER, то внутренний счетчик времени сбрасывается на начальное значение. В таймере этот счетчик уменьшается, и если доходит до нуля, то подается сигнал на реле, и оно замыкает контакты ресета. И в еепром записывается очередная запись о том, что ресет произошел.

Так же по UART могут приходить различные команды как то: запросить информацию о софте Вачдога, установить некоторые настройки, запросить лог из еепром о том, когда произошли ресеты, и последняя команда — очищение лога.

Так как Вачдог у меня цепляется на линуксовый сервер, то с ним общается линуксовая программка-демон. Хотя я ее писал, как обычную программу, буду ее все равно называть демоном. На сервере она должна постоянно работать. И если она зависнет, то сервер ресетнется. И соответственно, запускать ее надо при каждом старте. Я поместил скрипт запуска в каталог скриптов, которые стартуют при старте сервера.

Да. Запускать именно эту версию надо именно из того каталога, где лежит конфигурационный файл для нее. Поэтому я нарисовал небольшой скриптик, который запоминает, где мы находимся, переходит в каталог с прогой, стартует ее, и возвращается туда, где мы были во время старта:

  1. #!/bin/bash
  2. OldDir=`pwd`;
  3. cd /usr/share/PCWatchdog
  4. ./PCWatchDog &
  5. cd $OldDir

В файле конфигурации можно найти следущее:

  1. #This is Config file for PCWatchDog programm
  2. [WatchDog]
  3. ComPortName=/dev/ttyUSB
  4. BaudRate=19200
  5. TriggerDelay=10000
  6. AnswerWaitDelay = 1000
  7. [Network]
  8. LocalPort=30000
  9. [Logging]
  10. LogFile=/var/log/PCWatchDog.log
  11. LogToConsole=1
  12. # 0: LOG_NONE
  13. # 1: LOG_INFO
  14. # 2: LOG_ERROR
  15. # 3: LOG_DEBUG
  16. LogLevel=2

В разделе [WatchDog] находятся основные параметры именно Вачдога, а именно:

  • ComPortName — имя порта связи с Вачдогом. Но внимание! без номера. Об этом расскажу далее
  • BaudRate — скорость обмена с Вачдогом.
  • TriggerDelay — время, через которое нужно слать Вачдогу команду WD_CMD_TRIGGER.
  • AnswerWaitDelay — задержка, в течение которой ожидается ответ от вачдога. Об этом так же далее.

В разделе [Network] пока что один парметр LocalPort. Это порт, к которому коннектится третья программка. О ней тоже далее. Скорее всего в другом посте.

В разделе  [Logging] находятся параметры для ведения лога:

  • LogFile — файл, куда будут складываться все записи, если следующий параметр равен 0.
  • LogToConsole — определяет, выводить лог на консоль, или же в файл
  • LogLevel — определяет уровень детализации лога:
  • 0 — LOG_NONE — Ничего не будет выводиться.
  • 1 — LOG_INFO — только справочная информация.
  • 2 — LOG_ERROR — так же добавятся сообщения об ошибках.
  • 3 — LOG_DEBUG — и еще добавится отладочная информация.

Про порт и его имя без номера теперь. Дело в том, что я использую USB-шный конвертер USB-Serial от FTDI. В линуксе, судя по постам на различных форумах, с версии ядра 2.6.18 появилась интересная фича. Корневой USB хаб пропадает не на долго, потом снова появляется. Причем не важно, что там подключено к нему, какие девайсы.

И у меня это выразилось в таком баге, как пропаже ком-порта. Причем заметил такую закономерность, что чем активнее идет общение с вачдогом, тем быстрее он пропадает. Но не всегда. Например на днях он у меня держался три дня! вместо обычных 3-х часов.

А при обратном подключении хаба, порт появляется, но уже не с тем же именнем а с другим, с номером на 1 больше, так как первый то еще занят демоном!

Вот. Поиск в  гугле дал мало чего полезного, поэтому я пошел другим путем и сделал такой финт ушами. Как только програмка — демон не может записать ничего в компорт, или происходит таймаут на получение ответа, мы закрываем этот порт, и пытаемся открыть следующий. Таким образом идет перебор от 0 до 9, по кругу, пока какой нить порт не откроется или не придет правильный ответ от Вачдога. Вот такой вот обход этой фичи.

Этот демон работает как триггер вачдога и в тоже время как ретранслятор для GUI программки, с помощью которой можно уже более интересней управлять сервером. Но об этом в следующем посте, а пока небольшой список файликов, необходимых для повторения этой поделки:

17 комментариев к “Watchdog для компьютера”

  1. marshallab пишет:

    И как, работает?

    По опыту установки компов в качестве серверов, такая система не особо нужна. Хорошее/качественное железо, связанное с управляемым бесперибойником. Винду/сервисы 2000/2003/2008 урезать до необходимого минимума, вход и работа только под юзером (опять же набор прав нужно подправить), антивирус какойнть... годами работает (в магазинах).

    Еще знакомые ставят такие девайсы: коробочка с выходами PS/2 мышь, клава (с УСБ не видел), вроде бы ресет есть, все это через ethternet + vpn подключено к инету = Удаленное управление. Не помню как коробочки называются, но они есть.

  2. MasterAlexei пишет:

    Ну, у меня не коробочка а обычный комп, самосборный и линукс на нем в качестве сервера. Для винды нужна лицензия (незабываем, что я в Германии нахожусь, а тут шутки с нелицинзированным софтом прокатывают не долго, находят быстро ;-) особенно если этот софт в интернет смотрит. ).

    Работает. Может и пол года работать, а может и три дня поработать и в 4е утра зависнуть. Я уж отключил все ненужные процессы, всякие сканеры измененных прав и прочее. Но вот все равно вешается, и в логах ничего не пишет, почему. Т.е. такая плавающая ошибка.

    Еще он зависать может, когда достаточно запылился, и проц перегревается, тогда, по частым ресетам можно уже сделать вывод, что пришел таки час профилактических работ с пылесосом ;-) Вот такой брутальный метод определения запыления :-D

  3. MasterAlexei пишет:

    Прочитал твой коммент повнимательней: «по опыту установки компов в качестве серверов...». А на критические задачи ставили компы? Там где софту доверяют в последнюю очередь. Вот там вот как раз таки без вачдога не обойтись. Например станции слежения/наблюдения за электро сетями (это те, которые сразу за электростанциями, т.е. наблюдают сети с напругой в 10 КВ и больше). Мне как то посчастливилось программить один такой компик. Конечно с обычным домашним компом ничего общего. Но без вачдога его даже в стойку не поставят ;-) Не говоря о том, что не включат без него.

  4. marshallab пишет:

    Привет. Нет, у меня попроще «сервера». Продуктовые и другие магазины: один комп главная база, кассы периферийные базы. Но если что глюканет, да еще какойнть умник начнет бочку в мое сторону катить... ничего приятного. Так что качественное новое железо и полное урезание прав и свобод пользователям/персоналу. Так спокойней.

  5. Vetal пишет:

    хм... Mega128, mega162... Думаю тут достаточно какой-нибудь tiny13 если с FTDI или mega8 без FTDI.

    А зачем конденсатор в цепи реле ?

  6. MasterAlexei пишет:

    Ну, как бы, сейчас код для вачдога занимает 9696 байт. Т.е. в мегу 8 уже не влезет. А вы туда хотели еще и УСБ драйвер воткнуть ;-)

    Конденсатор в цепи реле, чтобы реле сработало, «сорвало» якорь. А когда он зарядится, то через сопротивление уже идет меньше тока, так как чтобы удерживать якорь много тока не надо. Там по ссылке на сайт DI HALTa все подробно описано про это.

  7. Vetal пишет:

    Ого... Если это только вачдог что-то очень раздут. Что он у вас такое делает? Анализирует адекватность ответов сервера? :) Весь функционал надо переносить на PC. Про конденсатор понял, приму на вооружение, но в вашем случае он не нужен, т.к. всего на долю секунды надо замкнуть Reset.

  8. MasterAlexei пишет:

    А вы продолжение читали? Самая свежая статься на сайте, пока что. Там и написано, чего оно так «раздуто».

    Кстати — я вот тут мыслю одну обрабатываю сейчас — и еще «вдую» в него небольшую функциональность — будет у меня температуру мониторить в сервере, чтобы можно было ее в логи сохранять ;-) и потом на сервере в виде графика представлять.

  9. MasterAlexei пишет:

    Функционал на PC. Вачдог как раз таки нужен для того, чтобы смотреть, чтобы этот PC, с перенесенным на него функционалом, не завис случаем. А то толку от этого «перенесенного» функционала будет не так много.

  10. Vetal пишет:

    Вачдог на то и вачдог что от него не требуются фитчи, он просто должен нажать резет. Посмотрите на вачдог в микроконтроллере может просто его использовать.

    З.Ы. я вас не осуждаю, просто думаю что можно проще смотреть на жизнь

  11. MasterAlexei пишет:

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

    Почему все думают, что вачдог — это такая штучка, которой даже питания не надо подавать? Это вам не будильник, который раз в сутки звонит и говорит, что пора на работу.

    Ну и потом, мне бы очень не хотелось, чтобы именно по вине вачдога, а не самого сервера, этот сервер перегружался. Т.е. он должен быть более менее надежным и не допускать ложных срабатываний.

  12. Vetal пишет:

    Чем умнее устройство тем больше в нем багов и склонность к зависанию.

    1. Сколько раз он нажал резет — эти логи можно и нужно вести сразу на компьютере. Запоминать в вачдоге только последний резет.

    2. Отключить — тупо тумблер, хотя можно и по оригинальнее, но на размере прошивки это не сильно скажется.

    3. настраивать время — согласен, надо.

    З.Ы. Просмотрел исходник. Не нашел функцию main. Где комментарии? Мало что понял. :)

  13. MasterAlexei пишет:

    >1. Сколько раз он нажал резет — эти логи можно и нужно вести сразу на компьютере. Запоминать в вачдоге только последний резет.

    Интересно, как вы собираетесь на зависшем компе вести логи?

    >2. Отключить — тупо тумблер, хотя можно и по оригинальнее, но на размере прошивки это не сильно скажется.

    Такой сценарий — ваш сервер стоит, скажем, далеко в сибири (я в географии не силен, но вы меня поняли — далеко в общем) и собирает данные о погоде. Вы находитесь в, ну скажем в Москве. Вы поедете туда, чтобы переткнуть два проводка, а потом, через денек, еще раз, чтобы снова их воткнуть. Да? И кто будет финансировать вам такую увесилительную поездку?

    >З.Ы. Просмотрел исходник. Не нашел функцию main. Где комментарии? Мало что понял.

    Коментарии я пишу на работе. А дома я отдыхаю от работы ;-) Вот такая вот отговорка. А вообще в своем коде я пишу комменты, обычно, но в таких местах, где уж точно хрен чего поймешь без них. А тут все вроде как понятно. Я специально старался избегать имен пременных/функций типа a1 b2 c3 и так далее.

    main находится в PCWatchdog.с

    Если вы мне экзамен решили устроить, то его мне уже устроил мой текущий работодатель. И остался вполне доволен, о чем говорит мой заработок. Хотя хотелось бы и побольше малость :)

  14. Vetal пишет:

    Что вы, ни о каком экзамене не может быть и речи. Только выражаю свое мнение по вашему проекту и критика (надеюсь объективная). Про комментарии просто вопрос, без упрека.

    Считаю что вы слишком отклонились от первоначальной цели.

    >>1. После перезагрузки сразу прочитать когда она произошла и сохранить.

    >>2. Такой сценарий: как вы собираетесь отключить удаленно вачдог если сервер висит?

    >>З.Ы. просто, мое мнение: «много букв» можно проще и надежней.

    З.Ы Сейчас начну с main :)

  15. MasterAlexei пишет:

    Эммм. Я даже потерялся, чего ответить :)

    Вачдог отключать надо если сервер живой, и вам не надо его перегружать, когда вы выполняете на нем профилактические работы. Почему то мне казалось что в моих постах я донес эту мысль правильно. Видимо сказывается долгое пребывание в среде, которая по русски не разговаривает :)

    А вот если он завис, то на это и нужен вачдог, что бы он его перегрузил.

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

    Можно проще — не спорю, но в ущерб функциональности.

  16. shworker пишет:

    Для измерения температуры и не только и выдачи оных в виде графиков есть волшебные слова

    lmsensors / net-snmp / rrdtool

  17. MasterAlexei пишет:

    2 shworker:

    Круть. Только вот все эти волшебные слова нихрена не помогают, когда ядро исследуемого «пациента» паникует, однако.

Оставить комментарий или два

Пожалуйста, зарегистрируйтесь для комментирования.