繁体   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