Страница 1 из 1

Мониторинг состояния процесса httpd

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

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

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

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


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

Re: Мониторинг состояния процесса httpd

Добавлено: 2008-10-01 6:57:50
zg
вопросы:
1. если этот скрипт заточен под апач, то почему не впоспользоваться apachectl?
2. если нужен процесс апача, то почему не прочитать конфиг апача на тему файла pid?
3. зачем это делать на С, когда есть pgrep?
4. зачем куда-то заходить если достаточно проверь свбоден ли 80 порт?
5. зачем использовать телнет, когда можно сделать тоже самое на С?
6. зачем вообще нужен С, если вы его не знаете?

Re: Мониторинг состояния процесса httpd

Добавлено: 2008-10-01 8:02:38
SergeyJ2
zg писал(а):вопросы:
1. если этот скрипт заточен под апач, то почему не впоспользоваться apachectl?
2. если нужен процесс апача, то почему не прочитать конфиг апача на тему файла pid?
3. зачем это делать на С, когда есть pgrep?
4. зачем куда-то заходить если достаточно проверь свбоден ли 80 порт?
5. зачем использовать телнет, когда можно сделать тоже самое на С?
6. зачем вообще нужен С, если вы его не знаете?
4. На тот случай, если потребуется проверить удаленный сервер (задача первой функции к этому не относится)
5. А как это можно сделать?

Re: Мониторинг состояния процесса httpd

Добавлено: 2008-10-01 9:23:44
kmb
Был же порт, который отслеживает запущен процесс или нет и позволяет стартовать его...

Re: Мониторинг состояния процесса httpd

Добавлено: 2008-10-01 9:30:07
zg
SergeyJ2 писал(а):5. А как это можно сделать?

Код: Выделить всё

# man 2 connect
CONNECT(2)                FreeBSD System Calls Manual               CONNECT(2)

NAME
     connect -- initiate a connection on a socket

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <sys/types.h>
     #include <sys/socket.h>

     int
     connect(int s, const struct sockaddr *name, socklen_t namelen);

Re: Мониторинг состояния процесса httpd

Добавлено: 2008-10-01 11:12:40
SergeyJ2
zg писал(а):
SergeyJ2 писал(а):5. А как это можно сделать?

Код: Выделить всё

# man 2 connect
CONNECT(2)                FreeBSD System Calls Manual               CONNECT(2)

NAME
     connect -- initiate a connection on a socket

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <sys/types.h>
     #include <sys/socket.h>

     int
     connect(int s, const struct sockaddr *name, socklen_t namelen);
Да, со второй функцией как раз с помощью сокетов разобрался. Работает.