LINUX.ORG.RU

самописный watchdog


0

1

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

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

Ответ на: комментарий от 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 ★★★★★ ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.