Может ли PHP перезапустить Apache? - PullRequest
15 голосов
/ 08 января 2009

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

Может ли PHP сделать это? Я пробовал passthru и exec, но они не работали. Может быть, проблема в том, что я пытаюсь перезапустить родительский процесс PHP?

Спасибо за любую помощь !!

Ответы [ 7 ]

18 голосов
/ 08 января 2009

Я использовал скрипт cron (написанный на PHP, а не выполняемый с веб-сервера), чтобы проверить работоспособность сервера и перезапустить его.

Однако я бы не стал делать это из процесса, созданного на сервере, потому что вы знаете, что собираетесь убить родительский процесс, что плохо сказывается на ребенке.

Самый простой способ - получить файл / tmp / RESTART_APACHE, который может создать PHP и который проверяет скрипт cron. Если скрипт cron видит файл / tmp / RESTART_APACHE, тогда он правильно перезапускает Apache.

Использование скрипта cron приведет к задержке (до 60 с, если вы запускаете ее каждую минуту), но помимо этого она должна работать как вы хотите.

В зависимости от того, как вы собираетесь это использовать, это может помочь.

(Возможно, вы хотите использовать каталог, отличный от / tmp /, чтобы установить разрешения и запретить кому-либо на сервере создавать файл.)

РЕДАКТИРОВАТЬ: Пожалуйста, смотрите комментарий Аарона Н к этому сообщению. Я согласен с тем, что он говорит: вы действительно хотите быть осторожным, чтобы возможность перезапуска вашего веб-сервера не была общедоступной службой.

Ограничить доступ к системе, которая может вызвать перезагрузку; убедитесь, что файл, запускающий перезапуск, имеет ограниченные разрешения, поэтому только веб-процесс может создать этот файл и, как правило, быть умным.

13 голосов
/ 09 января 2009

Я сделал это для очень точной вещи. Однако это было исключительно для среды разработки, чтобы быстро создать виртуальный хост для наших разработчиков по требованию. До сих пор работал очень хорошо.

Мой подход состоял в том, чтобы создать нового пользователя в системе, дать этому пользователю права sudo для перезагрузки apache, и из Apache-> PHP я использовал SSH для localhost с авторизованным ключом без ключевой фразы для этого пользователя, выдав команду. *

Причиной этого было то, что я не хотел давать пользователю apache (обычно www-data) возможность перезагрузить себя. Я назвал нового пользователя wwwctrl.

Я использовал команду:

ssh -i /path/to/key-file wwwctrl@localhost sudo /etc/init.d/apache2 reload

Мне пришлось один раз выполнить эту команду вручную как пользователь wwwctrl, чтобы добавить локальный ключ хоста в ~ wwwctrl / .ssh / known_hosts.

Я использовал proc_open (), чтобы наблюдать за выполнением команды.

Фактически, я генерировал партию виртуальных хостов для разных установок Apache на разных системах, поэтому на каждой системе у меня был этот пользователь wwwctrl для перезагрузки Apache, в основном это делалось в "foreach hosts как host do ... wwwctrl @ host @».

1 голос
/ 24 апреля 2010

Я бы создал демон для мониторинга каталога сайтов и перезапускал Apache, когда файлы добавлялись или изменялись. Тогда вам не нужно ждать до 60 секунд, как с заданием cron.

1 голос
/ 08 января 2009

в сможет сделать это, не уверен, что вы можете запланировать до второго, но я думаю, это зависит от реализации

1 голос
/ 08 января 2009

Для этого вам нужно отредактировать файл sudo и затем выполнить команду restart, которая используется в вашей системе, конечно же, используя sudo. Если вы дадите подробности, я мог бы сказать вам, но есть ли у вас доступ для этого? Это размещено? Cron, вероятно, был бы лучшим выбором здесь.

1 голос
/ 08 января 2009

Разве вы не хотите передать «перезагрузку» вместо «перезагрузки»?

0 голосов
/ 08 января 2009

Эта сортирующая штука нарушает стандартную цепочку команд, поскольку apache вызывает php, а не наоборот. Я второе предложение cron. Просто установите задание cron с достаточными привилегиями для проверки изменений в файле хоста и перезапустите apache, если таковые обнаружены.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...