2014-01-20 3 views
0

У меня есть страница, на которой выполняется сценарий командной строки, используя exec() Этот скрипт вносит изменения в конфигурацию Apaches, новые корни документов и виртуальные хосты и т. Д. Этот скрипт работает точно так, как я хочу.Apache Reload - Останавливает скрипт

Мне нужно перезапустить Apache, чтобы изменения вступили в игру. Но если я делаю это из работающего скрипта или через php, он работает, но я не получаю обратной связи с php-страницы, поскольку Apache был перезапущен.

Я попытался использовать перезагрузку, но это делает то же самое и останавливает текущий PHP-скрипт. Есть ли способ объединить изменения конфигурации в Apache, не влияя на любые текущие сценарии?

Я перезагрузки Apache с PHP скрипт, используя:

exec('sudo /Web/apache_reload', $res); 

apache_reload содержит:

/sbin/chkconfig apache2 > /dev/null 
/etc/init.d/apache2 restart > /dev/null 

Благодарности

ответ

1

Вы можете попробовать использовать /etc/init.d/apache2 reload, который перегружает конфигурационные файлы, не убивая апач.

Однако для этого существуют более чистые решения.

Вместо фактического перезапуска apache вы можете создать пустой файл, то есть /tmp/reload_apache. Тогда у вас есть скрипт, выполняющийся каждую минуту через cron, который проверяет, существует ли этот файл, и если это так, он перезапустит apache и удалит файл.

Единственным недостатком является то, что вам, возможно, придется подождать до 60 секунд, пока апаша не перезапустится.

+0

Спасибо, я попробовал перезагрузить, но у меня была такая же проблема. Использование задания cron - это вариант, но когда он перезапускает Apache, мой скрипт может работать. Если я вызываю скрипт apache_reload с помощью JQUERY и получаю результат возврата, смогу ли я увидеть, что он не сработал (как перезагружен apache)? Если я могу, это может быть причиной этого. – JeffVader

+0

Если вы используете задание cron, вы можете сделать это без использования каких-либо exec() в php. Любая логика должна выполняться в PHP. Если вам действительно нужен сценарий оболочки для этого, просто держите его как можно проще, так что он будет работать всего несколько миллисекунд и, следовательно, вряд ли будет убит вашим заданием cron. Не слишком чистое решение, но может работать для вас. – MrTweek

Смежные вопросы