我有一个脚本,它接受一些参数并将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权限。还是同样的问题......答案 0 :(得分:3)
您可能错过了发送到stderr
的重要信息,因此您可以尝试将stderr
输出重定向到stdout
。将帮助您调试问题。
return shell_exec("/absolute/path/to/create_vhost.sh site_id domain.com 2>&1");