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

Перезапуск DHCPd сервера с WEB страницы.

Добавлено: 2009-10-06 0:01:09
METAJIJI
Кому нибудь доводилось решать такую штуку? Спросите зачем это нужно делать? :shock: отвечу, у нас в локалке для учета пользователей я написал простенькую админку на PHP+MySQL, где хранятся данные о пользователях, ФИО, IP, MAC и т.д. в сети стоит управляемый свитч, дабы работать было удобнее вот с этой админки можно добавить/удалить связку IP+MAC+Port со свитча. И вот некоторые не умеют настраивать сетевое подключение, а свитч их безбожно банит за это. Я решил запустить DHCP в сети и в принципе все было бы ничего, админка создает конфиг для DHCPd, и если ручками перезапустить его, то все хорошо. Но вот было бы просто прекрасно, если бы DHCPd перезапускался сам, без лишних пинков по SSH.

Поиски по интернету дали только это

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

$output = shell_exec('/usr/local/etc/rc.d/isc-dhcpd stop');
echo "<pre>$output</pre>";
$output = shell_exec('/usr/local/etc/rc.d/isc-dhcpd start');
echo "<pre>$output</pre>";
$output = shell_exec('/usr/local/etc/rc.d/isc-dhcpd status');
echo "<pre>$output</pre>";
Как результат работы этих манипуляций получаем:
net.inet.ip.forwarding: 1
Stopping dhcpd.

net.inet.ip.forwarding: 1
Starting dhcpd.

net.inet.ip.forwarding: 1
dhcpd is not running.
В общем сервер после этого лежит, и пока не зайдешь по SSH под root'ом и не подопнешь он не запускается :)

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

cd /usr/local/etc/rc.d/
./isc-dhcpd start
Может кто-нибудь поделится опытом?

Re: Перезапуск DHCPd сервера с WEB страницы.

Добавлено: 2009-10-06 0:08:26
paradox
в крон засунте простенький скрипт который сверяет последнее обновление файла dhcpd демона
и если были изменения то перезапускает демона

Re: Перезапуск DHCPd сервера с WEB страницы.

Добавлено: 2009-10-06 0:16:16
METAJIJI
paradox писал(а):в крон засунте простенький скрипт который сверяет последнее обновление файла dhcpd демона
и если были изменения то перезапускает демона
если можно поподробнее опишите :) ибо у меня знания FreeBSD на уровне пользователя... :"": , хотя я активно читаю статьи и форум Лисяры :)

P.S. с меня :drinks:

Re: Перезапуск DHCPd сервера с WEB страницы.

Добавлено: 2009-10-06 0:28:06
paradox

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

$output = shell_exec('sh /usr/local/etc/rc.d/isc-dhcpd stop');
echo "<pre>$output</pre>";
$output = shell_exec('sh /usr/local/etc/rc.d/isc-dhcpd start');
echo "<pre>$output</pre>";
$output = shell_exec('sh /usr/local/etc/rc.d/isc-dhcpd status');
echo "<pre>$output</pre>";
попробуйте еще так
если нет то с попробуйте

по второму пунтку мне тяжело думать
может кто мимо проходящий набросает мою идею

Re: Перезапуск DHCPd сервера с WEB страницы.

Добавлено: 2009-10-06 0:40:22
METAJIJI
Однако ругается, и просит root

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

cat /var/log/messages | grep dhcpd
Oct 6 05:32:49 opi9 root: /usr/local/etc/rc.d/isc-dhcpd: WARNING: unable to change permissions of /var/db/dhcpd/dhcpd.leases
Oct 6 05:32:49 opi9 dhcpd: you must be root to set user
Выходит со странички перезапустить не получится... А вот насчет cron хорошая мысль. Раз в неделю Cron у меня собирает конфиги с Wi-fi точек и со свитча конфиги... Буду думать, как осуществить запуск по изменению файла...
Спасибо, что подсказали!

Re: Перезапуск DHCPd сервера с WEB страницы.

Добавлено: 2009-10-06 6:24:21
METAJIJI
Путь решения найден! Оговорюсь сразу, немного нестандартный подход в осуществлении, использовал и crontab и запуск *.sh файлов с WEB страницы

Чтобы перезапустить сервер:
1. Нужно остановить его, делаем это с WEB страницы добавляем в PHP следующий код:

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

//показать результат
$output = shell_exec('/usr/local/etc/rc.d/isc-dhcpd stop');
echo "<pre>$output</pre>";
$output = shell_exec('/usr/local/etc/rc.d/isc-dhcpd status');
echo "<pre>$output</pre>";
2. Теперь нужно запустить остановленный демон, делаем это через crontab, в /etc/crontab запишем в конец следующее:

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

# пытаться запустить dhcpd снова если вдруг демон завершит работу.
* * * * * root /usr/local/etc/rc.d/isc-dhcpd start

Re: Перезапуск DHCPd сервера с WEB страницы.

Добавлено: 2009-10-06 6:49:40
GRooVE
извиняюсь, но какое-то нерациональное у Вас решение проблемы
зачем каждую минуту пытаться запустить dhcpd? имхо пустая трата ресурсов и лишняя работа
извините за столь грубое сравнение, но это равносильно тому, чтобы каждую минуту бегать открывать входную дверь для того, чтобы посмотреть не пришел ли к Вам кто-нибудь, вместо того, чтобы просто ожидать звонка в двери
Вам же уважаемый paradox сказал как это будет лучше сделать
от себя могу добавить: как вариант, используйте дату и время редактирования файла для принятия решения о перезагрузке демона
либо еще как вариант - создавайте пустой файл, который будет являтся флагом для перезагрузки dhcpd
вот Вам простейший скрипт, который проверяет наличие пустого файла /etc/dhcpd.flag, и в случае его присутствия - перегружает службу.

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

#!/bin/sh

if [ -f /etc/dhcpd.flag ]; then
  rm -f /etc/dhcpd.flag
  /usr/local/etc/rc.d/dhcpd restart
fi

Re: Перезапуск DHCPd сервера с WEB страницы.

Добавлено: 2009-10-06 13:26:45
METAJIJI
Спасибо за ответ, но не до конца понятно куда этот скрипт девать? Точно так же в crontab записать? И через каждую минуту его юзать, по моему тоже самое получается, что и в моем варианте. Ведь при попытке запуска демона, скрипт вернет ошибку

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

dhcpd already running? (pid=6285).
и ничего не предпримет... Тогда зачем эти финты ушами с датой изменения файла? Или сам crontab умеет следить за этим?
Что-то я совсем не запутался...

Re: Перезапуск DHCPd сервера с WEB страницы.

Добавлено: 2009-10-06 13:30:58
paradox
а я говорил о перезапуске DHCP хотя бы раз в 5 минут
с проверкой когда последний раз модифицировался его конфиг
елси больше чем пять минут назад значит ничего не делать
если меньше то перезапустить

Re: Перезапуск DHCPd сервера с WEB страницы.

Добавлено: 2009-10-06 17:59:42
METAJIJI
Как я понимаю в PHP скрипте нужно будет лишь предусмотреть создание флагового файла, и затем прописать в crontab запуск скрипта, который предложил уважаемый GRooVE. Скрипт будет проверять наличие созданного файла, и если он существует, удалять файл+перезапускать DHCPd.