0

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

这是我的代码:create_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 和终端。

作为参考,vhost_template 文件是这样的:

#!/bin/sh

SITE_ID=$1
DOMAIN=$2

#define the template.
cat  << EOF
[template code here with $SITE_ID and $DOMAIN parameters somewhere]
EOF

但是,如果我像这样在 PHP 中运行它:

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

我得到的输出很好,但没有创建文件!就像我说的,如果我放弃重定向,那么即使在 PHP 中,我也可以毫无问题地看到模板文件的输出。

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

编辑:只是想我会提到我认为这可能是权限问题,但我尝试在 shell_exec() 中使用 sudo,并使用 visudo 为 www-data 用户提供 sudo 权限。还是一样的问题...

4

1 回答 1

4

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

return shell_exec("/absolute/path/to/create_vhost.sh site_id domain.com 2>&1");
于 2013-06-21T12:59:54.977 回答