php 如何控制 nginx 的启动和关闭?

我想做一个 web 版本的服务器控制系统,后端语言用 php,现在我通过 php 的 shell_exec 函数调用命令似乎达不到目的,遂请大神帮忙看看有什么问题,谢谢。

我的大概代码如下:

echo '<pre>';print_r(shell_exec('whoami'));
$result = shell_exec($command);echo '<pre>command:',$command,'<br/>';print_r($result);exit;

echoJson(['errcode' => 0, 'msg' => '服务重启成功']);

执行后返回的结果如下:

www-data
command:service nginx stop
 * Stopping nginx nginx
   ...done.

这个执行完后我在服务器上执行 service nginx status ,他提示正在运行中。

阅读 2.5k
3 个回答

我自己解决了,是权限的问题,需要去 /etc/sudoers 文件里添加一行如下代码:

#www-data 用户执行 sudo 命令不再需要输入密码
www-data ALL=(ALL) NOPASSWD:ALL

然后在执行命令的前面加上 sudo ,即可。即:

sudo service nginx stop

因为我是在 docker 里面的服务器,ubuntu 系统镜像还没有安装 sudo 服务,随手

apt install sudo

给安装了 sudo 服务。

有意思,我在我的机器上尝试了,运行结果正确。
是不是你设置了关闭后自动重启?

新手上路,请多包涵

直接给所有命令的sudo权限会造成安全性问题,之前看到过一篇博客,提到过类似的问题,解决办法是使用chown修改nginx的文件所有者为www用户,参考chown www /usr/local/nginx/sbin/nginx。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题