簡體   English   中英

通過PHP腳本重啟apache2

[英]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上詢問您在這里做什么的含義。

解決方案已在此處討論。

如何通過單擊(Web)按鈕重新啟動Apache?

在sudoers文件中,您具有“重新啟動”,在php文件中,您具有“重新加載”

檢查是否需要使用/ sbin / service而不是/ etc / service

確保命令在PHP和sudoer文件中匹配

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM