У меня есть сервер 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.