Может ли PHP перезапустить Apache?

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

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

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

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
15
0
16 184
7

Ответы 7

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

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

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

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

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

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

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

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

Обновлено: См. Комментарий Аарона Х. к этому сообщению. Я согласен с тем, что он говорит: вы действительно хотите быть осторожными, чтобы возможность перезапуска веб-сервера не была общедоступной услугой.

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

Важно добавить, что это очень плохая идея, если служба (PHP) вообще доступна снаружи ... То, что перезапускает ваши веб-службы, должно использоваться только администраторами, иначе вы откроете дверь для целого ряда возможность компрометации вашего сервера.

Aaron H. 08.01.2009 23:33

Вы не сказали, как именно будет происходить этот перезапуск? какой код нужно выполнить

Click Upvote 08.01.2009 23:46

@Java PHP - если вы просто пытаетесь перезагрузить конфигурацию, вам нужно только запустить "apachectl graceful" (или "apache2ctl graceful")

Chris Burgess 09.01.2009 00:00

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

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

at обычно запускается из cron, так что это не будет быстрее, чем запуск cron, не так ли?

Chris Burgess 09.01.2009 02:26

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

Мой подход заключался в том, чтобы создать нового пользователя в системе, дать этому пользователю права 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, как хост ... wwwctrl @ host @».

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

Другие вопросы по теме