用php + nginx执行shell脚本

时间:2014-11-30 00:53:02

标签: php shell laravel nginx

我想在我的php web应用程序上使用exec_shell函数在某些情况下重新加载我的nginx,如下所示:

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

此代码在我的route.php文件上重新加载nginx的每个请求之后运行。

我的subdomain.sh shell文件还包含:

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

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

Reloading nginx ... fail !

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

感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

为了随意猜测,您尝试使用可能没有超级用户权限的帐户以root身份执行shell脚本。 Nginx 应该作为没有root访问权限的用户运行。您可以尝试做的是相应地修改脚本文件的权限,以便它以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文件绝对不是正确的答案,并带来安全问题。