PHP exec()运行的Bash脚本未正确执行重定向

PHP exec()运行的Bash脚本未正确执行重定向,php,bash,exec,io-redirection,Php,Bash,Exec,Io Redirection,我有一个脚本,它接受一些参数并将herdoc的输出重定向到另一个文件,以便为web服务器创建一个虚拟主机文件。 当我在命令行中运行脚本时,它执行得很好,并且创建了文件,但是当我使用PHP的exec或shell_exec运行脚本时,它不会创建文件。其他一切(回显或尝试简单地返回输出,而不是重定向输出)运行良好-只是创建文件没有发生,我没有收到任何问题的迹象 这是我的密码: 创建_vhost.sh: #!/bin/bash #Use the template to create the vhost

我有一个脚本,它接受一些参数并将herdoc的输出重定向到另一个文件,以便为web服务器创建一个虚拟主机文件。 当我在命令行中运行脚本时,它执行得很好,并且创建了文件,但是当我使用PHP的exec或shell_exec运行脚本时,它不会创建文件。其他一切(回显或尝试简单地返回输出,而不是重定向输出)运行良好-只是创建文件没有发生,我没有收到任何问题的迹象

这是我的密码: 创建_vhost.sh:

#!/bin/bash
#Use the template to create the vhost file
echo "Creating vhost file in sites-available"
sudo /absolute/path/to/vhost_template.sh $1 $2 > /etc/nginx/sites-available/$2
service nginx restart
我像这样运行上面的脚本:
/absolute/path/to/create_vhost.sh site_id domain.com
,它使用ssh和Terminal可以完美地工作

作为参考,vhost_模板文件如下所示:

#!/bin/sh

SITE_ID=$1
DOMAIN=$2

#define the template.
cat  << EOF
[template code here with $SITE_ID and $DOMAIN parameters somewhere]
EOF
我得到的输出很好,但没有创建任何文件!正如我所说的,如果我放弃重定向,那么即使在PHP中,我也可以看到模板文件的输出

我已经看了好几个小时了,但我还是被难住了。有什么建议吗


编辑:我想我应该提到,我认为这可能是一个权限问题,但我尝试在shell_exec()中使用sudo,并使用visudo赋予www数据用户sudo权限。还是同样的问题…

您可能遗漏了发送到
stderr
的一些重要信息,因此您可以尝试将
stderr
输出重定向到
stdout
。将帮助您调试该问题

return shell_exec("/absolute/path/to/create_vhost.sh site_id domain.com 2>&1");

您可能遗漏了发送到
stderr
的一些重要信息,因此您可以尝试将
stderr
输出重定向到
stdout
。将帮助您调试该问题

return shell_exec("/absolute/path/to/create_vhost.sh site_id domain.com 2>&1");

可能Web服务器用户没有对您尝试创建文件的目录的写入权限in@DevZer0可能不会,但如果我使用sudo来运行我的脚本,那就不重要了吗?或者我只是愚蠢。我以前使用过另一个脚本(这是ruby,不是bash),它由Web服务器用户运行并写入同一目录。。。正如我在帖子中提到的,我试着用sudo运行,但仍然没有成功。运行这个,看看你得到了什么
返回shell_exec(“/absolute/path/to/create_vhost.sh site_id domain.com 2>&1”)好的,更像是这样。在没有sudo的情况下运行,脚本的几乎每一行都会被拒绝。使用sudo时,PHP脚本根本不返回任何数据。。。因此,我似乎把允许www数据用户拥有该文件的根权限搞砸了。谢谢,我会进一步调查的。。。至少现在我知道出了什么问题。没问题欢迎使用堆栈溢出可能Web服务器用户没有对您尝试创建文件的目录的写入权限in@DevZer0可能不会,但如果我使用sudo来运行我的脚本,那就不重要了吗?或者我只是愚蠢。我以前使用过另一个脚本(这是ruby,不是bash),它由Web服务器用户运行并写入同一目录。。。正如我在帖子中提到的,我试着用sudo运行,但仍然没有成功。运行这个,看看你得到了什么
返回shell_exec(“/absolute/path/to/create_vhost.sh site_id domain.com 2>&1”)好的,更像是这样。在没有sudo的情况下运行,脚本的几乎每一行都会被拒绝。使用sudo时,PHP脚本根本不返回任何数据。。。因此,我似乎把允许www数据用户拥有该文件的根权限搞砸了。谢谢,我会进一步调查的。。。至少现在我知道出了什么问题。没问题欢迎来到Stack Overflow谢谢!(再次)。这有助于我调试情况,最终我使一切正常工作;)非常感谢!(再次)。这有助于我调试情况,最终我使一切正常工作;)