URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 7616
[ Назад ]

Исходное сообщение
"Мониторинг состояния процесса httpd"

Отправлено Павел , 01-Окт-08 06:29 
Добрый день.
Друзья, передо мной появилась такая задача, прошу помочь разобраться в ее решении.
Постановка: требуется на языке Си реализовать работу двух следующих функций (рассматриваемая ОС - FreeBSD):
1) Функция f1 принимает в качестве своего аргумента название процесса (давайте попробуем рассмотреть на примере httpd).
Функция должна определить запущен ли процесс с таким именем, а если процесс по каким либо причинам не запущен - стартовать его (команды start/stop допустим определены в конфиг файле программы и нашей функции известны).

Комментарии:
В самом простейшем случае работу функции представляю себе такой:
а) Получаем название процесса.
б) Смотрим есть ли его отображение в /var/run/.
в) Если есть, все ок, если нет - запускаем.
Мне остается непонятным, что будет, если скажем установлено два сервера Apache, или процесс не хранит свое отображение в /var/run/.
То есть желательно определить способ, схожий по принципу работы с тем, как происходит получение информации о пользователи системы, файлах (заполняются информацией поля элемента определенной структуры).

2) Функция f2 должна проверить, есть доступ (возвращается ли содержимое страницы?) по http по 80 порту (определить, таким образом, корректно ли функционирует Apache). И если нет, то перезагрузить его. Команды, опять же, известны.

Комментарии:
Здесь к сожалению ничего кроме как телнетом по 80 порту ничего в голову не приходит.


В результате, получится примитивный аналог программы monit для одного процесса.
Очень прошу помочь советами. Заранее благодарен.


Содержание

Сообщения в этом обсуждении
"Мониторинг состояния процесса httpd"
Отправлено vg , 01-Окт-08 11:42 
какова конечная цель?
почему не использовать готовые программы?
например, Nagios имеет плагины check_procs и check_httpd

"Мониторинг состояния процесса httpd"
Отправлено Andrey Mitrofanov , 01-Окт-08 12:04 
>Добрый день.
>Друзья, передо мной появилась такая задача, прошу помочь разобраться в ее решении.
>
>Постановка: требуется на языке Си реализовать работу двух следующих функций

Выбор языка несколько необычен... То ли "студент с заданием от препода" пришёл, то ли "эмбеддед солюшен профешшионал программер".

>(рассматриваемая ОС - FreeBSD):
>1) Функция f1 принимает в качестве своего аргумента название процесса (давайте попробуем
>рассмотреть на примере httpd).

Запускать "приложение" из inittab? -->man inittab

>2) Функция f2 должна проверить, есть доступ (возвращается ли содержимое страницы?) по
>http по 80 порту (определить, таким образом, корректно ли функционирует Apache).
>И если нет, то перезагрузить его. Команды, опять же, известны.

По крону (man crontab) проверять связь с и ответ от и прибивать процесс, если не. После чего он будет [пере]запущен по п.1.

>Здесь к сожалению ничего кроме как телнетом по 80 порту ничего в
>голову не приходит.
>
>
>В результате, получится примитивный аналог программы monit для одного процесса.
>Очень прошу помочь советами. Заранее благодарен.

Традиционными средствами - где-то так. При чём тут "написать программу" и Си - не знаю.