Назад | Перейти на главную страницу

можно ли перезагрузить httpd с php

У меня есть сервер LAMP, работающий на 64-битной CentOS 5.5, и я хотел бы перезагрузить свою службу httpd после создания новых поддоменов.

У меня есть 3 сервера, смонтированные на моем веб-сервере, и в зависимости от того, какие ресурсы есть на каждом подключенном сервере, я создаю новые учетные записи пользователей и добавляю их на доступный сервер.

например, когда пользователь регистрируется и ему требуется 5 ГБ пространства, мои сценарии PHP просматривают мои смонтированные серверы, чтобы узнать, есть ли у них слот для размещения, открытый для нового пользователя. если нет, то он переходит к следующему серверу и так далее. Итак, в зависимости от сервера, на котором они оказываются, я создаю новые файлы conf, чтобы отразить этот сервер как их DocumentRoot.

проблема в том, что мне нужно перезагрузить службу httpd вручную после создания каждого поддомена для определенного пользователя.

Я пытаюсь найти способ перезагрузить службу httpd, как только пользователь зарегистрируется.

в настоящее время я пытаюсь это:

system("/bin/echo '/sbin/service httpd reload > /dev/null 2>&1' | /usr/bin/at now");

моя служба httpd находится по адресу /etc/init.d/httpd

Выполнение команд требует root от PHP - не лучшая идея. Я бы посоветовал вам следить за /etc/httpd/conf.d папку и перезагружать Apache всякий раз, когда он изменяется. Взгляни на Incron.


Установите его из rpmforge репозиторий:

# yum -y install incron

Отредактируйте корневой каталог crontab с помощью incrontab -e:

/etc/httpd/conf.d/ IN_CREATE,IN_DELETE,IN_MODIFY /etc/init.d/httpd reload

Начни это:

# service incrond start
# chkconfig incrond on

и создать .conf файл в /etc/httpd/conf.d и взгляни на /var/log/cron чтобы увидеть, что происходит.

Я бы сделал это, если бы php создал каталог где-нибудь в файловой системе, а затем запустил сценарий cron от имени пользователя root, который проверил бы наличие каталога и перезапустил HTTP-сервер, если он существует, и удалил каталог. Таким образом, по крайней мере, вы не даете пользователю httpd слишком много привилегий.

Сценарий PHP может вызывать «перезапуск apachectl» через sudo (т. Е. sudo /usr/sbin/apachectl restart), а sudo можно настроить так, чтобы разрешить пользователю, запускающему httpd (и, следовательно, предположительно, скрипт PHP), запускать эту команду без пароля. Эта линия sudoers код достигнет этого:

apache  ALL=(root) NOPASSWD: /usr/sbin/apachectl restart

Очевидно, вам нужно будет убедиться, что пользователь и путь к нему верны для вашей среды; мои взяты из системы CentOS 5.