Наконец-то, сбылось то, чего я обещал. Собрал-таки и запрограммил я Watchdog для своего сервера. Чем и спешу поделиться с общественностью.
Так что, если кому надо следить за тем, чтобы его компьютер или сервер не завис, читаем далее.
И так, для начала несколько фоток, чего там вышло. Сразу предупрежу, в начальную схему были внесены некоторые изменения, но плату я переделывать для себя не стал. Поэтому не пугайтесь того, что там есть напаянные проводочки.
В общем вот вид со стороны основных деталей:
Это — с обратной:
А это я его уже прикрутил к корзине с дисками в сам сервер.
Пока что он у меня в режиме тестирования, т.е. к кнопке ресета я его пока что не подключил.
Вот. Ну глянем на схемку сначала. В принципе ничего особенного — обычная мега 128-я, FTDI-шный USB-Serial конвертер, и релюшка. Про реле хотел бы сказать немного.Подключение реле я сделал по уроку DI-HALT'а, доступному тут. Так оно выглядит у меня:
Он там подробно описал, зачем вокруг реле столько лишних деталей понапихано.
В принципе — работает. Но только, если подключено к материнской плате на прямую, или от хаба со своим питанием. От моего ноутбука реле не срабатывает, хотя и щелкает. Видимо, надо параметры конденсатора подбирать для каждого конкретного случая.
Ну вот собственно и все со схемой. Конечно мега 128-я для такой задачи более чем избыточна, поэтому я попытаюсь переделать прошивку под мегу 162, так как она есть у меня в распаянном виде. Но не обещаю, что это будет скоро.
В кратце расскажу о софте. Прошивка меги не сильно сложная. Слушает UART на предмет входящих пакетов, разбирает их по командам, и если приходит команда WD_CMD_TRIGGER, то внутренний счетчик времени сбрасывается на начальное значение. В таймере этот счетчик уменьшается, и если доходит до нуля, то подается сигнал на реле, и оно замыкает контакты ресета. И в еепром записывается очередная запись о том, что ресет произошел.
Так же по UART могут приходить различные команды как то: запросить информацию о софте Вачдога, установить некоторые настройки, запросить лог из еепром о том, когда произошли ресеты, и последняя команда — очищение лога.
Так как Вачдог у меня цепляется на линуксовый сервер, то с ним общается линуксовая программка-демон. Хотя я ее писал, как обычную программу, буду ее все равно называть демоном. На сервере она должна постоянно работать. И если она зависнет, то сервер ресетнется. И соответственно, запускать ее надо при каждом старте. Я поместил скрипт запуска в каталог скриптов, которые стартуют при старте сервера.
Да. Запускать именно эту версию надо именно из того каталога, где лежит конфигурационный файл для нее. Поэтому я нарисовал небольшой скриптик, который запоминает, где мы находимся, переходит в каталог с прогой, стартует ее, и возвращается туда, где мы были во время старта:
- #!/bin/bash
- OldDir=`pwd`;
- cd /usr/share/PCWatchdog
- ./PCWatchDog &
- cd $OldDir
В файле конфигурации можно найти следущее:
- #This is Config file for PCWatchDog programm
- [WatchDog]
- ComPortName=/dev/ttyUSB
- BaudRate=19200
- TriggerDelay=10000
- AnswerWaitDelay = 1000
- [Network]
- LocalPort=30000
- [Logging]
- LogFile=/var/log/PCWatchDog.log
- LogToConsole=1
- # 0: LOG_NONE
- # 1: LOG_INFO
- # 2: LOG_ERROR
- # 3: LOG_DEBUG
- 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 программки, с помощью которой можно уже более интересней управлять сервером. Но об этом в следующем посте, а пока небольшой список файликов, необходимых для повторения этой поделки:
- Схема Вачдога: pcwatchdog-schematic.pdf
- Прошивка для меги: avrpcwatchdog.rar
- Общие для всех проектов файлы: Common.rar
- Демон: LinuxPCWatchDog.rar
- GUI для общения с вачдогом (Виндовсы): WatchDogConnect.rar
17 комментариев к “Watchdog для компьютера”
Оставить комментарий или два
Пожалуйста, зарегистрируйтесь для комментирования.
6th March 2010 в 9:19
И как, работает?
По опыту установки компов в качестве серверов, такая система не особо нужна. Хорошее/качественное железо, связанное с управляемым бесперибойником. Винду/сервисы 2000/2003/2008 урезать до необходимого минимума, вход и работа только под юзером (опять же набор прав нужно подправить), антивирус какойнть... годами работает (в магазинах).
Еще знакомые ставят такие девайсы: коробочка с выходами PS/2 мышь, клава (с УСБ не видел), вроде бы ресет есть, все это через ethternet + vpn подключено к инету = Удаленное управление. Не помню как коробочки называются, но они есть.
6th March 2010 в 9:37
Ну, у меня не коробочка а обычный комп, самосборный и линукс на нем в качестве сервера. Для винды нужна лицензия (незабываем, что я в Германии нахожусь, а тут шутки с нелицинзированным софтом прокатывают не долго, находят быстро особенно если этот софт в интернет смотрит. ).
Работает. Может и пол года работать, а может и три дня поработать и в 4е утра зависнуть. Я уж отключил все ненужные процессы, всякие сканеры измененных прав и прочее. Но вот все равно вешается, и в логах ничего не пишет, почему. Т.е. такая плавающая ошибка.
Еще он зависать может, когда достаточно запылился, и проц перегревается, тогда, по частым ресетам можно уже сделать вывод, что пришел таки час профилактических работ с пылесосом Вот такой брутальный метод определения запыления
6th March 2010 в 9:43
Прочитал твой коммент повнимательней: «по опыту установки компов в качестве серверов...». А на критические задачи ставили компы? Там где софту доверяют в последнюю очередь. Вот там вот как раз таки без вачдога не обойтись. Например станции слежения/наблюдения за электро сетями (это те, которые сразу за электростанциями, т.е. наблюдают сети с напругой в 10 КВ и больше). Мне как то посчастливилось программить один такой компик. Конечно с обычным домашним компом ничего общего. Но без вачдога его даже в стойку не поставят Не говоря о том, что не включат без него.
17th March 2010 в 4:54
Привет. Нет, у меня попроще «сервера». Продуктовые и другие магазины: один комп главная база, кассы периферийные базы. Но если что глюканет, да еще какойнть умник начнет бочку в мое сторону катить... ничего приятного. Так что качественное новое железо и полное урезание прав и свобод пользователям/персоналу. Так спокойней.
4th May 2010 в 15:08
хм... Mega128, mega162... Думаю тут достаточно какой-нибудь tiny13 если с FTDI или mega8 без FTDI.
А зачем конденсатор в цепи реле ?
4th May 2010 в 15:23
Ну, как бы, сейчас код для вачдога занимает 9696 байт. Т.е. в мегу 8 уже не влезет. А вы туда хотели еще и УСБ драйвер воткнуть
Конденсатор в цепи реле, чтобы реле сработало, «сорвало» якорь. А когда он зарядится, то через сопротивление уже идет меньше тока, так как чтобы удерживать якорь много тока не надо. Там по ссылке на сайт DI HALTa все подробно описано про это.
4th May 2010 в 15:32
Ого... Если это только вачдог что-то очень раздут. Что он у вас такое делает? Анализирует адекватность ответов сервера? Весь функционал надо переносить на PC. Про конденсатор понял, приму на вооружение, но в вашем случае он не нужен, т.к. всего на долю секунды надо замкнуть Reset.
4th May 2010 в 15:40
А вы продолжение читали? Самая свежая статься на сайте, пока что. Там и написано, чего оно так «раздуто».
Кстати — я вот тут мыслю одну обрабатываю сейчас — и еще «вдую» в него небольшую функциональность — будет у меня температуру мониторить в сервере, чтобы можно было ее в логи сохранять и потом на сервере в виде графика представлять.
4th May 2010 в 15:42
Функционал на PC. Вачдог как раз таки нужен для того, чтобы смотреть, чтобы этот PC, с перенесенным на него функционалом, не завис случаем. А то толку от этого «перенесенного» функционала будет не так много.
4th May 2010 в 16:06
Вачдог на то и вачдог что от него не требуются фитчи, он просто должен нажать резет. Посмотрите на вачдог в микроконтроллере может просто его использовать.
З.Ы. я вас не осуждаю, просто думаю что можно проще смотреть на жизнь
4th May 2010 в 16:15
Ага. Но мне почему то еще хочется, чтобы он мне показал, сколько раз он нажал на ресет, когда именно это произошло, чтобы он попищал малость перед тем как нажать на ресет. И чтобы я мог навремя отключить его, не вскрывая корпус, например, чтобы перезапустить некоторые службы и при этом демон вачдога будет вырублен, и ресет в данный момент не желателен. Так же мне бы хотелось настраивать время, когда при отсутствии сигнала с наблюдаемого компа нажмется ресет.
Почему все думают, что вачдог — это такая штучка, которой даже питания не надо подавать? Это вам не будильник, который раз в сутки звонит и говорит, что пора на работу.
Ну и потом, мне бы очень не хотелось, чтобы именно по вине вачдога, а не самого сервера, этот сервер перегружался. Т.е. он должен быть более менее надежным и не допускать ложных срабатываний.
4th May 2010 в 16:45
Чем умнее устройство тем больше в нем багов и склонность к зависанию.
1. Сколько раз он нажал резет — эти логи можно и нужно вести сразу на компьютере. Запоминать в вачдоге только последний резет.
2. Отключить — тупо тумблер, хотя можно и по оригинальнее, но на размере прошивки это не сильно скажется.
3. настраивать время — согласен, надо.
З.Ы. Просмотрел исходник. Не нашел функцию main. Где комментарии? Мало что понял.
4th May 2010 в 17:03
>1. Сколько раз он нажал резет — эти логи можно и нужно вести сразу на компьютере. Запоминать в вачдоге только последний резет.
Интересно, как вы собираетесь на зависшем компе вести логи?
>2. Отключить — тупо тумблер, хотя можно и по оригинальнее, но на размере прошивки это не сильно скажется.
Такой сценарий — ваш сервер стоит, скажем, далеко в сибири (я в географии не силен, но вы меня поняли — далеко в общем) и собирает данные о погоде. Вы находитесь в, ну скажем в Москве. Вы поедете туда, чтобы переткнуть два проводка, а потом, через денек, еще раз, чтобы снова их воткнуть. Да? И кто будет финансировать вам такую увесилительную поездку?
>З.Ы. Просмотрел исходник. Не нашел функцию main. Где комментарии? Мало что понял.
Коментарии я пишу на работе. А дома я отдыхаю от работы Вот такая вот отговорка. А вообще в своем коде я пишу комменты, обычно, но в таких местах, где уж точно хрен чего поймешь без них. А тут все вроде как понятно. Я специально старался избегать имен пременных/функций типа a1 b2 c3 и так далее.
main находится в PCWatchdog.с
Если вы мне экзамен решили устроить, то его мне уже устроил мой текущий работодатель. И остался вполне доволен, о чем говорит мой заработок. Хотя хотелось бы и побольше малость
4th May 2010 в 17:37
Что вы, ни о каком экзамене не может быть и речи. Только выражаю свое мнение по вашему проекту и критика (надеюсь объективная). Про комментарии просто вопрос, без упрека.
Считаю что вы слишком отклонились от первоначальной цели.
>>1. После перезагрузки сразу прочитать когда она произошла и сохранить.
>>2. Такой сценарий: как вы собираетесь отключить удаленно вачдог если сервер висит?
>>З.Ы. просто, мое мнение: «много букв» можно проще и надежней.
З.Ы Сейчас начну с main
4th May 2010 в 18:42
Эммм. Я даже потерялся, чего ответить
Вачдог отключать надо если сервер живой, и вам не надо его перегружать, когда вы выполняете на нем профилактические работы. Почему то мне казалось что в моих постах я донес эту мысль правильно. Видимо сказывается долгое пребывание в среде, которая по русски не разговаривает
А вот если он завис, то на это и нужен вачдог, что бы он его перегрузил.
После перезагрузки, как бы некоторые системы и сами пишут, что они включились. Тот же линукс, проблема только в том, что они об этом пишут всегда, даже когда во всем здании свет отключают и потом снова включают. Т.е. есть вероятность не узнать, по причине зависа произошел рестарт или же просто уборщица со шваброй мимо проходила.
Можно проще — не спорю, но в ущерб функциональности.
14th December 2010 в 23:12
Для измерения температуры и не только и выдачи оных в виде графиков есть волшебные слова
lmsensors / net-snmp / rrdtool
14th December 2010 в 23:29
2 shworker:
Круть. Только вот все эти волшебные слова нихрена не помогают, когда ядро исследуемого «пациента» паникует, однако.