Я хочу перезапустить 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
,
Я что-то не так делаю?
Сервис Apache, вероятно, не имеет прав на перезагрузку
Решение уже обсуждалось здесь.
Как перезапустить Apache нажатием кнопки (веб)?
В файлах sudoers у вас есть «перезагрузка», в php-файле у вас есть «перезагрузка»
Проверьте, нужно ли вам использовать / sbin / service вместо / etc / service
Убедитесь, что команды соответствуют в PHP и файле sudoer
@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 для последствий того, что вы делаете здесь.