LINUX.ORG.RU

самописный watchdog


0

1

Добрый вечер,

Я только начинаю изучать с++, прошу помощи в написании демона который будет следить за скриптом на php и запускать его в случае если тот упадет или зависнет. Если вопрос слишком обьемный для темы, то, хотя бы ткните куда нибудь почитать. Заранее благодарен.

Вам для саморазвития или реально решили новый велосипед подарить миру?

zolden ★★★★★ ()
Ответ на: комментарий от zolden

Конечно для саморазвития, просто есть желание разобраться в с++ и есть реальная но не китичная задача по работе, вот решил совместить

temp001 ()
Ответ на: комментарий от temp001

Я, конечно, код реальных вотчдогов в глаза не видел, но, думаю, в простейшем случае суть у них всех одна - проверка наличия процесса в памяти и старта в случае отрицательного результата
Вот например как выглядит простейший скриптовый вотчдог (в кроне)

*/5 * * * * pgrep -f script.php || script.php&

Можете сделать также, начав с этого
http://programming-in-linux.blogspot.com/2008/03/get-process-id-by-name-in-c....

zolden ★★★★★ ()
Ответ на: комментарий от zolden

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

temp001 ()
Ответ на: комментарий от temp001

Так а какой конкретики надо, если уже есть рабочий пример? Смотришь, какие функции используются в том, что есть, и ищешь, чем их заменить в С++. Если есть вопрос по тому, что именно из баша заменить на подоходящее в С++ - это и надо спрашивать.

roy ★★★★★ ()
Ответ на: комментарий от temp001

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

http://www.sourceforge.net/projects/watchdog/
http://www.linuxconsulting.ro/pidwatcher/

Или скрипт ваш вкомпилируйте в бинарник, что уж там, тоже тренировка

zolden ★★★★★ ()
Ответ на: комментарий от roy

Я слышал что можно на уровне ОС посылать процессу нечто вроде пинга и если процесс не отвечает в течении некоторого времени то ОС считает его упавшим. Вот что то типа этого хочется реалтзовать на с++ помимо просто го сканирования наличия процесса в системе.

temp001 ()
Ответ на: комментарий от temp001

Не слышал про такой механизм. Если только в самом процессе реализовать возможность отвечать на внешние сигналы. Но зачем? Смотри по списку процессов, простой и надёжный способ.

roy ★★★★★ ()
Ответ на: комментарий от roy

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

temp001 ()
Ответ на: комментарий от temp001

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

roy ★★★★★ ()
Ответ на: комментарий от roy

В данный момент это у меня делается через файл который процесс каждые 10 сек делает touch, а мой скрипт смотрит время изменения файла, но хотелось бы сделать это как то нормальнее

temp001 ()

Зачем C++? Возьми лучше Питончик. Гораздо больше фана и профита.

power ()
Ответ на: комментарий от temp001

> хотелось бы сделать это как то нормальнее

Сделай сигналами. Или с помощью разделяемой памяти, чтобы твой наблюдаемый процесс мог обмениваться более подробной информацией (что делает, с кем делает, когда доделает и т.п.).

cipher ★★★★★ ()
Ответ на: комментарий от temp001

По-моему, вполне нормальный вариант. Главное, чтобы не было ситуации, когда процесс обновляет файл, хотя он «завис». Например, если обновление статусного файла производится в отдельном потоке, а рабочий поток нефункционален уже. Если такой ситуации нет - я бы не стал что-то менять.

roy ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.