apache — перезапустить apache2 через скрипт PHP

Я хочу перезапустить apache2, когда я загружаю страницу со следующим кодом:

exec('/etc/init.d/apache2 reload', $output, $return);
if(!$return) {
$result = "<script>console.log('can not restart apache2');</script>";
echo $result;
echo $output;
} else {
$result = "<script>console.log('restart apache2 successfuly');</script>";
echo $result;
}

И в файле etc/sudoers Я добавляю эти строки:

Cmnd_Alias      RESTART_APACHE = /etc/service apache2 restart
www-data ALL=NOPASSWD: RESTART_APACHE

Но результат возвращается can not restart apache2,

Я что-то не так делаю?

1

Решение

Сервис Apache, вероятно, не имеет прав на перезагрузку

0

Другие решения

Решение уже обсуждалось здесь.

Как перезапустить Apache нажатием кнопки (веб)?

В файлах sudoers у вас есть «перезагрузка», в php-файле у вас есть «перезагрузка»

Проверьте, нужно ли вам использовать / sbin / service вместо / etc / service

Убедитесь, что команды соответствуют в PHP и файле sudoer

0

@tuanptit
<?php echo shell_exec('service httpd restart &'); ?>

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

Но лучший способ справиться с этим, ИМХО, — дать пользователю, работающему под Apache, перезапустить Apache через команда sudo.

Вы захотите отредактировать ваш файл / etc / sudoers и добавить строки, подобные следующим:

Cmnd_Alias      RESTART_APACHE = /sbin/service apache2 restart

www-data ALL=NOPASSWD: RESTART_APACHE

Вам может понадобиться nobody вместо www-data, это зависит от пользователя, под которым работает Apache. В Debian Apache обычно работает под пользователем www-dataтогда как в Red Hat Apache часто запускается под пользователем никем. Так же /sbin/service apache2 restart может понадобиться /sbin/service apache restart или, может быть /sbin/service httpd restart, Все зависит от конфигурации вашей системы.

Как только это будет сделано, в PHP вы можете использовать код:

exec('/sbin/service apache2 restart');

(Очевидно, изменив это, если команда для перезапуска Apache отличается на вашем сервере.)

пожалуйста, обратите внимание: это вполне может считаться угрозой безопасности! Если вы делаете это, вы полностью доверяете sudo бинарный, service бинарный, и ваша система подчиняется правилам и не позволяет процессу Apache / PHP получить корневую оболочку. Я настоятельно рекомендую спросить http://serverfault.com для последствий того, что вы делаете здесь.

0
По вопросам рекламы [email protected]