我有一个脚本,它接受一些参数并将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 权限。还是一样的问题...