У меня есть сценарий, который принимает некоторые параметры и перенаправляет вывод heredoc в другой файл, чтобы создать файл виртуального хоста для веб-сервера. Когда я запускаю скрипт в командной строке, он выполняется отлично, и файл создается, но когда я запускаю его с помощью 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 с Terminal.
Для справки файл 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 я вижу вывод файла шаблона без проблем.
Я смотрел на это часами, но я просто в тупике. Какие-либо предложения?
EDIT: Просто подумал, что я бы упомянул, что я думал, что это, вероятно, проблема с правами, но я попытался использовать sudo в shell_exec () и с помощью visudo предоставить привилегии пользователя sudo для WWW-данных. Еще одна проблема …