[lang_ru]Наконец-то, сбылось то, чего я обещал. Собрал-таки и запрограммил я Watchdog для своего сервера. Чем и спешу поделиться с общественностью.[/lang_ru]
[lang_de]Endlich mal ist es geschehen, was ich schon längst versprochen habe — Watchdog für einen Rechner ist fertig! [/lang_de][lang_ru]Так что, если кому надо следить за тем, чтобы его компьютер или сервер не завис, читаем далее.[/lang_ru]
[lang_de]Also, wenn jemand es braucht, sein Rechner oder Server zu überwachen, dann liest weiter! [/lang_de]
[lang_ru]И так, для начала несколько фоток, чего там вышло. Сразу предупрежу, в начальную схему были внесены некоторые изменения, но плату я переделывать для себя не стал. Поэтому не пугайтесь того, что там есть напаянные проводочки.[/lang_ru]
[lang_de]So. Für Anfang — ein paar Bilder. Natürlich während der Entwicklüng sind ein paar Änderungen vorgenommen wurde, was man auf der Fotos sieht, aber die Platine habe ich nicht neue gemacht, sondern alles auf der alten eingebaut.[/lang_de]
[lang_ru]В общем вот вид со стороны основных деталей:[/lang_ru]
[lang_de]So sieht das Teil von Oben: [/lang_de]
[lang_ru]Это — с обратной:[/lang_ru]
[lang_de]Und so — von der anderen Seite: [/lang_de]
[lang_ru]А это я его уже прикрутил к корзине с дисками в сам сервер.[/lang_ru]
[lang_de]Und hier ist es schon in meinem Server: [/lang_de]
[lang_ru]Пока что он у меня в режиме тестирования, т.е. к кнопке ресета я его пока что не подключил.[/lang_ru]
[lang_de]Zur Zeit ist das Wathcdog in der Testphase, deswegen habe ist es zu der Reset-Taste noch nicht angeschlossen. [/lang_de]
[lang_ru]Вот. Ну глянем на схемку сначала. В принципе ничего особенного — обычная мега 128-я, FTDI-шный USB-Serial конвертер, и релюшка. Про реле хотел бы сказать немного.Подключение реле я сделал по уроку DI-HALT'а, доступному тут. Так оно выглядит у меня:[/lang_ru]
[lang_de]So. Hier findet man die Schaltplan davon. In Prinzip, nichts besonderes — normale Mega128 von Atmel. USB-Seriell Konverter von FTDI und Relais.
Das Relais habe ich folgendermaßen angeschloßen (Hier ist die Beschreibung von der Schaltung-Methode, russisch. )[/lang_de]
[lang_ru]Он там подробно описал, зачем вокруг реле столько лишних деталей понапихано.[/lang_ru]
[lang_ru]В принципе — работает. Но только, если подключено к материнской плате на прямую, или от хаба со своим питанием. От моего ноутбука реле не срабатывает, хотя и щелкает. Видимо, надо параметры конденсатора подбирать для каждого конкретного случая.[/lang_ru]
[lang_de]Die Methode funktioniert, und sollte nur an der Schlisphase viel Strom verbrauchen, danach, aber, nur soviel, um das Relais in zugeschaltetem Zustand zu halten. Aber wenn man das Watchdog an einen Noutbook anschließt, dann wird, wahrscheinlich, das Relais nicht schließen können, da die Parameters von Kondensator nicht für von Notebooks Port gelieferten Strom geeignet. [/lang_de]
[lang_ru]Ну вот собственно и все со схемой. Конечно мега 128-я для такой задачи более чем избыточна, поэтому я попытаюсь переделать прошивку под мегу 162, так как она есть у меня в распаянном виде. Но не обещаю, что это будет скоро.[/lang_ru]
[lang_de]Das ist eigentlich alles über die Schaltung. Natürlich Mega 128 ist ein bisschen zu viel für solche Aufgabe, deswegen werde ich versuchen die Frimware auf Mega 162 oder 16 umzubauen. aber es wird nicht sofort passieren. [/lang_de]
[lang_ru]В кратце расскажу о софте. Прошивка меги не сильно сложная. Слушает UART на предмет входящих пакетов, разбирает их по командам, и если приходит команда WD_CMD_TRIGGER, то внутренний счетчик времени сбрасывается на начальное значение. В таймере этот счетчик уменьшается, и если доходит до нуля, то подается сигнал на реле, и оно замыкает контакты ресета. И в еепром записывается очередная запись о том, что ресет произошел.[/lang_ru]
[lang_de]Kurz über die Software. Die Firmware ist nicht so besonders kompliziert. Es werden auf dem UART Port die Pakete gelesen, die Kommandos werden geparst, und wenn das Kommando WD_CMD_TRIGGER, ankommt, wird interne Zähler zurückgesetzt. In einem Timer wird der Zähler decrementiert, und wenn der gleich 0 wird, wird das Relais angesteuert. Und in das EEPROM wird ein Eintrag reingeschrieben, dass es ein Reset Evenet passiert. [/lang_de]
[lang_ru]Так же по UART могут приходить различные команды как то: запросить информацию о софте Вачдога, установить некоторые настройки, запросить лог из еепром о том, когда произошли ресеты, и последняя команда — очищение лога.[/lang_ru]
[lang_de]Genau so über den UART Port können die anderen Kommandos ankommen. Z.B: Request der Information über die Firmware und die Einstellungen des Watchdogs, Setzen die Einstellungen, Request der Log Einträge, Löschen des Logs. [/lang_de]
[lang_ru]Так как Вачдог у меня цепляется на линуксовый сервер, то с ним общается линуксовая программка-демон. Хотя я ее писал, как обычную программу, буду ее все равно называть демоном. На сервере она должна постоянно работать. И если она зависнет, то сервер ресетнется. И соответственно, запускать ее надо при каждом старте. Я поместил скрипт запуска в каталог скриптов, которые стартуют при старте сервера.[/lang_ru]
[lang_de]Das Watchdog hängt bei mir auf meinem Linux-Server. Deswegen ist ein Linux-Programm erforderlich, um das Watchdog zu triggern. Nennen wir das als Demon, obwohl das nicht als Demon entwickelt wurde. Das Programm muss ständig laufen. Und wenn das aufgehängt, wird das Watchdog den Server reseten. Und natürlich, muss man das Programm bei jedem Start des Rechner mitstarten. Dafür habe ich den Start-Skript ins Start-Verzeichnis gelegt.[/lang_de]
[lang_ru]Да. Запускать именно эту версию надо именно из того каталога, где лежит конфигурационный файл для нее. Поэтому я нарисовал небольшой скриптик, который запоминает, где мы находимся, переходит в каталог с прогой, стартует ее, и возвращается туда, где мы были во время старта:[/lang_ru]
[lang_de]Ach ja. Die Version des Demons liest die Konfigurationsdaten aus dem aktuellen Verzeichnis. Deswegen habe ich ein kleines Skript geschrieben, der speichert das aktuelle Verzeichnis, geht in das Verzeichnis, wo das Demon liegt, starten dem, und geht wieder zurück: [/lang_de]
[codesyntax lang="bash" lines_start="1" container="div" title="Watchdog starter" ]
#!/bin/bash
OldDir=`pwd`;
cd /usr/share/PCWatchdog
./PCWatchDog &
cd $OldDir
[/codesyntax]
[lang_ru]В файле конфигурации можно найти следущее:[/lang_ru]
[lang_de]In der Konfigurationsdatei kann man volgendes finden: [/lang_de]
[codesyntax lines_start="1" container="div" title="PCWatchDogConfig.cfg" ]
#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
[/codesyntax]
[lang_ru]В разделе [WatchDog] находятся основные параметры именно Вачдога, а именно:[/lang_ru]
[lang_de]In dem [WatchDog] Bereich befinden sich die Einstellungen für das Watchdog selbst: [/lang_de]
- [lang_ru]ComPortName — имя порта связи с Вачдогом. Но внимание! без номера. Об этом расскажу далее[/lang_ru]
- [lang_de]ComPortName — Name des Kommunikation-Ports. Aber ohne Nummer am Ende! Darüber erzähle ich weiter.[/lang_de]
- [lang_ru]BaudRate — скорость обмена с Вачдогом.[/lang_ru]
- [lang_de]BaudRate — Kom.Port Geschwindigkeit.[/lang_de]
- [lang_ru]TriggerDelay — время, через которое нужно слать Вачдогу команду WD_CMD_TRIGGER.[/lang_ru]
- [lang_de]TriggerDelay — Die Zeit, nach der das Demon das WD_CMD_TRIGGER Kommandos schicken wird.[/lang_de]
- [lang_ru]AnswerWaitDelay — задержка, в течение которой ожидается ответ от вачдога. Об этом так же далее.[/lang_ru]
- [lang_de]AnswerWaitDelay — Die Zeit, währen das Demon auf einen Antwort von dem Watchdog warten wird.[/lang_de]
[lang_ru]В разделе [Network] пока что один парметр LocalPort. Это порт, к которому коннектится третья программка. О ней тоже далее. Скорее всего в другом посте.[/lang_ru]
[lang_de]In dem [Network] Bereich ist im Moment nur eine Einstellung: LocalPort. Das ist die Port-Nummer, an der wird das dritte Programm sich anschließen. Darüber ain bisschen später. Vielleicht in einem andern Post. [/lang_de]
[lang_ru]В разделе [Logging] находятся параметры для ведения лога:[/lang_ru]
[lang_de]In dem [Logging] Bereich sind die Einstellungen des Logging System des Demons: [/lang_de]
- [lang_ru]LogFile — файл, куда будут складываться все записи, если следующий параметр равен 0.[/lang_ru]
- [lang_de]LogFile — die Datei für die Logeinträge.[/lang_de]
- [lang_ru]LogToConsole — определяет, выводить лог на консоль, или же в файл[/lang_ru]
- [lang_de]LogToConsole — definiert, ob für Logging die Konsole benutzt werden muss, oder die Log-Datei. [/lang_de]
- [lang_ru]LogLevel — определяет уровень детализации лога:[/lang_ru]
- [lang_de]LogLevel — definiert, was genau geloggt werden muss:[/lang_de]
- [lang_ru]0 — LOG_NONE — Ничего не будет выводиться.[/lang_ru]
- [lang_de]0 — LOG_NONE — Es wird nichts geloggt.[/lang_de]
- [lang_ru]1 — LOG_INFO — только справочная информация.[/lang_ru]
- [lang_de]1 — LOG_INFO — Nur die kleinste Informationsmenge.[/lang_de]
- [lang_ru]2 — LOG_ERROR — так же добавятся сообщения об ошибках.[/lang_ru]
- [lang_de]2 — LOG_ERROR — es werden noch die Fehlermeldungen dazugeschrieben.[/lang_de]
- [lang_ru]3 — LOG_DEBUG — и еще добавится отладочная информация.[/lang_ru]
- [lang_de]3 — LOG_DEBUG — und auch einige Debug Information.[/lang_de]
[lang_ru]Про порт и его имя без номера теперь. Дело в том, что я использую USB-шный конвертер USB-Serial от FTDI. В линуксе, судя по постам на различных форумах, с версии ядра 2.6.18 появилась интересная фича. Корневой USB хаб пропадает не на долго, потом снова появляется. Причем не важно, что там подключено к нему, какие девайсы.[/lang_ru]
[lang_de]Jetzt über den Port und seine Nummer. Das Problemm ist das, dass ich den USB-Seriell Konverter benutze. In dem Linux Kernel, laut einigen Forumen, seit der Version 2.6.18 gibt es eine tolle Feature. Den USB Hub ab und zu verschwindet für kurze Zeit und wird wieder aufgetaucht. Und es ist egal, was an dem Hub hängt — ein USB Stick, oder eine Kamera oder noch was. [/lang_de]
[lang_ru]И у меня это выразилось в таком баге, как пропаже ком-порта. Причем заметил такую закономерность, что чем активнее идет общение с вачдогом, тем быстрее он пропадает. Но не всегда. Например на днях он у меня держался три дня! вместо обычных 3-х часов.[/lang_ru]
[lang_de]Und bei mir wurde es in ein Fehler gewandelt, in dem das Demon nicht mehr ins Port schreiben konnte, weil der nicht mehr da ist. Und wenn USB Hub wieder da wird, wird ein weiteres Serielles Port gemacht, weil der erste von dem Demon besetzt ist. [/lang_de]
[lang_ru]А при обратном подключении хаба, порт появляется, но уже не с тем же именнем а с другим, с номером на 1 больше, так как первый то еще занят демоном![/lang_ru]
[lang_ru]Вот. Поиск в гугле дал мало чего полезного, поэтому я пошел другим путем и сделал такой финт ушами. Как только програмка — демон не может записать ничего в компорт, или происходит таймаут на получение ответа, мы закрываем этот порт, и пытаемся открыть следующий. Таким образом идет перебор от 0 до 9, по кругу, пока какой нить порт не откроется или не придет правильный ответ от Вачдога. Вот такой вот обход этой фичи.[/lang_ru]
[lang_de]So. In Google gibt es nicht viel Infomationen darüber. Deswegen habe ich mich folgendes ausgedacht. Sobald das Programm eine Fehlermeldung bekommt, dass das ins Port nicht schreiben kann, wird es versucht einen weiteren Port aufmachen. Und das passiert solange, bis von irgend einem Port eine richtige Antwort kommt. Es werden alle Ports mit der Nummern 0 bis 9 ausprobiert. [/lang_de]
[lang_ru]Этот демон работает как триггер вачдога и в тоже время как ретранслятор для GUI программки, с помощью которой можно уже более интересней управлять сервером. Но об этом в следующем посте, а пока небольшой список файликов, необходимых для повторения этой поделки:[/lang_ru]
[lang_de]Und dieses Demon funktioniert sowohl als Trigger des Watchdogs, als auch die Anbindung zwischen das Watchdog und dem dritten GUI- Programm, mit dem man die einige Kontrolle über das Watchdog bekommen kann. Darüber werde ich in meinen weiteren Posts berichten. und jetzt ist die Liste der Dateien, die man braucht, um das Teil zu bauen: [/lang_de]
- [lang_ru]Схема Вачдога: pcwatchdog-schematic.pdf[/lang_ru]
- [lang_de]Die Watchdog-Schaltung: pcwatchdog-schematic.pdf[/lang_de]
- [lang_ru]Прошивка для меги: avrpcwatchdog.rar[/lang_ru]
- [lang_de]Die Firmware für den Mega: avrpcwatchdog.rar[/lang_de]
- [lang_ru]Общие для всех проектов файлы: Common.rar[/lang_ru]
- [lang_de]Gemainsame Dateien für die ganze Projekten: Common.rar[/lang_de]
- [lang_ru]Демон: LinuxPCWatchDog.rar[/lang_ru]
- [lang_de]Das Demon: LinuxPCWatchDog.rar[/lang_de]
- [lang_ru]GUI для общения с вачдогом (Виндовсы): WatchDogConnect.rar[/lang_ru]
- [lang_de]Das GUI Programm (für Windows): WatchDogConnect.rar[/lang_de]
17 комментариев to “Watchdog для компьютера|PC Watchdog”
Leave a Reply
You must be logged in to post a comment.
May 4th, 2010 at 16:15
Ага. Но мне почему то еще хочется, чтобы он мне показал, сколько раз он нажал на ресет, когда именно это произошло, чтобы он попищал малость перед тем как нажать на ресет. И чтобы я мог навремя отключить его, не вскрывая корпус, например, чтобы перезапустить некоторые службы и при этом демон вачдога будет вырублен, и ресет в данный момент не желателен. Так же мне бы хотелось настраивать время, когда при отсутствии сигнала с наблюдаемого компа нажмется ресет.
Почему все думают, что вачдог — это такая штучка, которой даже питания не надо подавать? Это вам не будильник, который раз в сутки звонит и говорит, что пора на работу.
Ну и потом, мне бы очень не хотелось, чтобы именно по вине вачдога, а не самого сервера, этот сервер перегружался. Т.е. он должен быть более менее надежным и не допускать ложных срабатываний.
May 4th, 2010 at 16:45
Чем умнее устройство тем больше в нем багов и склонность к зависанию.
1. Сколько раз он нажал резет — эти логи можно и нужно вести сразу на компьютере. Запоминать в вачдоге только последний резет.
2. Отключить — тупо тумблер, хотя можно и по оригинальнее, но на размере прошивки это не сильно скажется.
3. настраивать время — согласен, надо.
З.Ы. Просмотрел исходник. Не нашел функцию main. Где комментарии? Мало что понял. 🙂
May 4th, 2010 at 17:03
>1. Сколько раз он нажал резет — эти логи можно и нужно вести сразу на компьютере. Запоминать в вачдоге только последний резет.
Интересно, как вы собираетесь на зависшем компе вести логи?
>2. Отключить — тупо тумблер, хотя можно и по оригинальнее, но на размере прошивки это не сильно скажется.
Такой сценарий — ваш сервер стоит, скажем, далеко в сибири (я в географии не силен, но вы меня поняли — далеко в общем) и собирает данные о погоде. Вы находитесь в, ну скажем в Москве. Вы поедете туда, чтобы переткнуть два проводка, а потом, через денек, еще раз, чтобы снова их воткнуть. Да? И кто будет финансировать вам такую увесилительную поездку?
>З.Ы. Просмотрел исходник. Не нашел функцию main. Где комментарии? Мало что понял.
Коментарии я пишу на работе. А дома я отдыхаю от работы 😉 Вот такая вот отговорка. А вообще в своем коде я пишу комменты, обычно, но в таких местах, где уж точно хрен чего поймешь без них. А тут все вроде как понятно. Я специально старался избегать имен пременных/функций типа a1 b2 c3 и так далее.
main находится в PCWatchdog.с
Если вы мне экзамен решили устроить, то его мне уже устроил мой текущий работодатель. И остался вполне доволен, о чем говорит мой заработок. Хотя хотелось бы и побольше малость 🙂
May 4th, 2010 at 17:37
Что вы, ни о каком экзамене не может быть и речи. Только выражаю свое мнение по вашему проекту и критика (надеюсь объективная). Про комментарии просто вопрос, без упрека.
Считаю что вы слишком отклонились от первоначальной цели.
>>1. После перезагрузки сразу прочитать когда она произошла и сохранить.
>>2. Такой сценарий: как вы собираетесь отключить удаленно вачдог если сервер висит?
>>З.Ы. просто, мое мнение: «много букв» можно проще и надежней.
З.Ы Сейчас начну с main 🙂
May 4th, 2010 at 18:42
Эммм. Я даже потерялся, чего ответить 🙂
Вачдог отключать надо если сервер живой, и вам не надо его перегружать, когда вы выполняете на нем профилактические работы. Почему то мне казалось что в моих постах я донес эту мысль правильно. Видимо сказывается долгое пребывание в среде, которая по русски не разговаривает 🙂
А вот если он завис, то на это и нужен вачдог, что бы он его перегрузил.
После перезагрузки, как бы некоторые системы и сами пишут, что они включились. Тот же линукс, проблема только в том, что они об этом пишут всегда, даже когда во всем здании свет отключают и потом снова включают. Т.е. есть вероятность не узнать, по причине зависа произошел рестарт или же просто уборщица со шваброй мимо проходила.
Можно проще — не спорю, но в ущерб функциональности.
December 14th, 2010 at 23:12
Для измерения температуры и не только и выдачи оных в виде графиков есть волшебные слова
lmsensors / net-snmp / rrdtool
December 14th, 2010 at 23:29
2 shworker:
Круть. Только вот все эти волшебные слова нихрена не помогают, когда ядро исследуемого «пациента» паникует, однако.