2013-06-21 106 views
1

我有一個腳本,它需要一些參數並將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權限。仍然是同樣的問題...

+0

也許是web服務器用戶不必你試圖 – DevZer0

+0

@ DevZer0創建一個文件可能不是目錄的寫權限,但如果我使用sudo來運行我的腳本,那不是不再重要?或者我只是愚蠢的。我以前使用另一個腳本(這是紅寶石,而不是bash),由網絡服務器用戶運行,並寫入到同一目錄中... 正如我在帖子中提到的,我嘗試使用sudo運行,但仍然沒有運氣。 – SharkofMirkwood

+0

運行這個,看看你得到了什麼'return shell_exec(「/ absolute/path/to/create_vhost.sh site_id domain.com 2> &1");' – DevZer0

回答

3

你可能會錯過一些重要的信息發送到stderr,所以你可以嘗試重定向stderr輸出到stdout。將幫助您調試問題。

return shell_exec("/absolute/path/to/create_vhost.sh site_id domain.com 2>&1"); 
+0

非常感謝! (再次)。這幫助我調試情況,最終我得到了一切工作;) – SharkofMirkwood

+0

享受SO。謝謝 :) – DevZer0