使用 PHP + nginx 执行 shell 脚本


execute shell script with php + nginx

我想在我的 php Web 应用程序上使用 php exec_shell函数的一些场景后重新加载我的 nginx,如下所示:

shell_exec('sudo sh /var/www/camva/subdomain.sh');

此代码在每次请求在我的路由.php文件上重新加载nginx后运行。

我的 subdomain.sh 外壳文件还包含:

#!/bin/bash
sudo /etc/init.d/nginx restart

但是我在每次请求后都会给出这个回应:

Reloading nginx ... fail !

我不知道为什么会出现这种情况,但我可以使用与 "sudo /etc/init.d/nginx restart" 相同的终端命令在我的根目录中运行此命令,并给出有关重新加载 nginx 的正确响应!

感谢您的帮助。

随意猜测,您正在尝试使用可能没有root访问权限的帐户以root身份执行shell脚本。 Nginx应该以没有root访问权限的用户身份运行。 您可以尝试做的是相应地对脚本文件的权限进行 chmod,以便即使其他用户激活它,它也能以 root 身份运行。

首先使 root 成为要运行的脚本的所有者 (subdomain.sh)。在 CLI 中运行这些命令,而不是在脚本中运行。

sudo chown root.root /var/www/camva/subdomain.sh

然后使脚本文件可由所有人执行,并且只能对root进行可写。

sudo chmod 4755 /var/www/camva/subdomain.sh

现在nginx用户应该能够执行脚本,但不能更改文件内容。

也就是说,我想知道为什么您需要重新加载服务器,以及是否有更好的解决方案来解决您试图解决的总体问题。

我要指出的是,将您的nginx用户添加到sudoers文件中绝对不是正确的答案,并且会带来安全问题。