[英]Restart apache2 via PHP script
當我使用以下代碼加載頁面時,我想重新啟動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服務可能沒有權限自行重啟
@tuanptit
<?php echo shell_exec('service httpd restart &'); ?>
但是,嘗試執行此操作的腳本可能存在權限問題。 聽起來您好像處在一個完整的開發環境中,因此您不必為此賦予特權。
但是,解決此問題的最佳方法的最好方法是恕我直言,這是通過sudo命令為用戶提供Apache運行權限以重啟Apache。
您將需要編輯/ 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通常在nobody用戶下運行。 另外, /sbin/service apache2 restart
可能需要/sbin/service apache restart
或/sbin/service httpd restart
。 全部取決於您系統的配置。
完成后,在PHP中可以使用以下代碼:
exec('/sbin/service apache2 restart');
(顯然,如果重新啟動Apache的命令在您的服務器上不同,則進行更改。)
請注意 :這很可能被視為安全隱患! 如果執行此操作,則完全信任sudo
二進制文件, service
二進制文件以及您的系統可以遵守規則,並且不會讓Apache / PHP進程獲取根shell。 我強烈建議您在http://serverfault.com上詢問您在這里做什么的含義。
解決方案已在此處討論。
在sudoers文件中,您具有“重新啟動”,在php文件中,您具有“重新加載”
檢查是否需要使用/ sbin / service而不是/ etc / service
確保命令在PHP和sudoer文件中匹配
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.