我有一個腳本,它需要一些參數並將heredoc的輸出重定向到另一個文件,以便爲Web服務器創建一個虛擬主機文件。 當我在命令行中運行腳本時,它執行得很好,並且創建了該文件,但是當我使用PHP的exec或shell_exec運行它時,它不會創建該文件。其他的東西(迴應或試圖簡單地返回輸出而不是重定向它)運行良好 - 只是創建文件不會發生,我也沒有收到任何跡象表明存在問題。由PHP exec()不執行正確重定向的Bash腳本
這裏是我的代碼: 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數據用戶sudo權限。仍然是同樣的問題...
也許是web服務器用戶不必你試圖 – DevZer0
@ DevZer0創建一個文件可能不是目錄的寫權限,但如果我使用sudo來運行我的腳本,那不是不再重要?或者我只是愚蠢的。我以前使用另一個腳本(這是紅寶石,而不是bash),由網絡服務器用戶運行,並寫入到同一目錄中... 正如我在帖子中提到的,我嘗試使用sudo運行,但仍然沒有運氣。 – SharkofMirkwood
運行這個,看看你得到了什麼'return shell_exec(「/ absolute/path/to/create_vhost.sh site_id domain.com 2> &1");' – DevZer0