Добрый день.
Друзья, передо мной появилась такая задача, прошу помочь разобраться в ее решении.
Постановка: требуется на языке Си реализовать работу двух следующих функций (рассматриваемая ОС - FreeBSD):
1) Функция f1 принимает в качестве своего аргумента название процесса (давайте попробуем рассмотреть на примере httpd).
Функция должна определить запущен ли процесс с таким именем, а если процесс по каким либо причинам не запущен - стартовать его (команды start/stop допустим определены в конфиг файле программы и нашей функции известны).
Комментарии:
В самом простейшем случае работу функции представляю себе такой:
а) Получаем название процесса.
б) Смотрим есть ли его отображение в /var/run/.
в) Если есть, все ок, если нет - запускаем.
Мне остается непонятным, что будет, если скажем установлено два сервера Apache, или процесс не хранит свое отображение в /var/run/.
То есть желательно определить способ, схожий по принципу работы с тем, как происходит получение информации о пользователи системы, файлах (заполняются информацией поля элемента определенной структуры).
2) Функция f2 должна проверить, есть доступ (возвращается ли содержимое страницы?) по http по 80 порту (определить, таким образом, корректно ли функционирует Apache). И если нет, то перезагрузить его. Команды, опять же, известны.
Комментарии:
Здесь к сожалению ничего кроме как телнетом по 80 порту ничего в голову не приходит.
В результате, получится примитивный аналог программы monit для одного процесса.
Очень прошу помочь советами. Заранее благодарен.
Мониторинг состояния процесса httpd
Модератор: Fastman
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Услуги хостинговой компании Host-Food.ru
Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Мониторинг состояния процесса httpd
вопросы:
1. если этот скрипт заточен под апач, то почему не впоспользоваться apachectl?
2. если нужен процесс апача, то почему не прочитать конфиг апача на тему файла pid?
3. зачем это делать на С, когда есть pgrep?
4. зачем куда-то заходить если достаточно проверь свбоден ли 80 порт?
5. зачем использовать телнет, когда можно сделать тоже самое на С?
6. зачем вообще нужен С, если вы его не знаете?
1. если этот скрипт заточен под апач, то почему не впоспользоваться apachectl?
2. если нужен процесс апача, то почему не прочитать конфиг апача на тему файла pid?
3. зачем это делать на С, когда есть pgrep?
4. зачем куда-то заходить если достаточно проверь свбоден ли 80 порт?
5. зачем использовать телнет, когда можно сделать тоже самое на С?
6. зачем вообще нужен С, если вы его не знаете?
-
- рядовой
- Сообщения: 28
- Зарегистрирован: 2008-08-11 14:21:18
Re: Мониторинг состояния процесса httpd
4. На тот случай, если потребуется проверить удаленный сервер (задача первой функции к этому не относится)zg писал(а):вопросы:
1. если этот скрипт заточен под апач, то почему не впоспользоваться apachectl?
2. если нужен процесс апача, то почему не прочитать конфиг апача на тему файла pid?
3. зачем это делать на С, когда есть pgrep?
4. зачем куда-то заходить если достаточно проверь свбоден ли 80 порт?
5. зачем использовать телнет, когда можно сделать тоже самое на С?
6. зачем вообще нужен С, если вы его не знаете?
5. А как это можно сделать?
-
- лейтенант
- Сообщения: 680
- Зарегистрирован: 2007-02-20 8:30:03
- Контактная информация:
Re: Мониторинг состояния процесса httpd
Был же порт, который отслеживает запущен процесс или нет и позволяет стартовать его...
truth is out there...
-
- полковник
- Сообщения: 5845
- Зарегистрирован: 2007-12-07 13:51:33
- Откуда: Верх-Нейвинск
Re: Мониторинг состояния процесса httpd
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);
-
- рядовой
- Сообщения: 28
- Зарегистрирован: 2008-08-11 14:21:18
Re: Мониторинг состояния процесса httpd
Да, со второй функцией как раз с помощью сокетов разобрался. Работает.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);