2013-03-20 52 views
1

我已經寫了這個簡單的shell腳本:調用shell命令具有不同的行爲比外殼

#!/bin/sh 
STORAGE_PATH=/tmp/; 
export STORAGE_PATH; 
cd STORAGE_PATH; 
perl /{SOME_PATH}/perl-script.pl; 

當我把它從外殼,它完美的作品如預期。但是從PHP中無限地掛起來,在調試時,我發現它在Perl執行過程中掛起,這並沒有任何意義,因爲如果它在shell中調用,它會繼續。

我與shebang #!/bin/sh有任何的錯誤嗎?我也嘗試了#!/bin/bash

我試圖在PHP中的所有變化:execsystemshell_execcallthru但沒有什麼工作..

我錯過了什麼?

+1

apache是​​否有權限執行perl腳本? – 2013-03-20 18:02:32

+0

除了檢查權限之外,還可以嘗試使用perl二進制文件的絕對路徑,以及您可能在perl腳本中調用的其他任何其他路徑。 '$ PATH'環境變量在登錄賬戶和服務賬戶之間經常不同。 – Sammitch 2013-03-20 18:08:34

+0

您可以通過將* -x *添加到#中來查看腳本正在執行的操作。 line **#!/ bin/sh -x ** – 2013-03-28 01:42:02

回答

0

嗯,我看不出它是如何在shell中工作的。

您正在致電/{SOME_PATH}/perl-script.pl,但未定義變量SOME_PATH。你的意思是STORAGE_PATH?另外,在{之前,您忘記了$

在執行此操作時,請檢查運行Web服務器的用戶是否有權執行這兩個腳本。

+0

對不起,我不得不明確地說{SOME_PATH}是一個靜態路徑,我沒有在帖子中寫過,只是爲了保持簡單明瞭。 – abounnour 2013-03-20 21:34:07

+0

我也檢查了權限,www-data(web服務器的用戶)有權執行這兩個腳本,甚至用(sudo su www-data)嘗試它,並且perl腳本的執行效果很好。隨着PHP的召喚出事了。 : -/ – abounnour 2013-03-20 21:35:54

+0

打開PHP中的調試輸出 - 記錄文件或echo輸出,讓我們知道它說什麼。 – fredrik 2013-03-20 21:46:15