2013-03-06 50 views
1

我有一個腳本在PHP中運行以下shell_exec cmd。Git POST webhook shell_exec

echo shell_exec('cd /var/www/Library/Laravel/ ; git pull bitbucket master ; 2>&1'); 

這是由一個網絡掛接服務叫了,我想要做的就是切斷其在此開發環境每次我們推到拉。

但是,在調用此路由時,我不會收到任何輸出錯誤或任何內容。任何人都可以提出爲什麼這可能是?

我從error_log中這呼應 - >

error: cannot open .git/FETCH_HEAD: Permission denied 

我加入了Apache用戶與git,現在我得到以下錯誤

Could not create directory '/var/www/.ssh'. 
Host key verification failed. 
fatal: The remote end hung up unexpectedly 

回答

0

在這裏我看到了幾個問題:

1)你的exec行「...; git pull bitbucket master; 2> & 1」應該是「... git pull bitbucket master 2」& 1「 - extrane ous分號可能會阻止您看到標準錯誤輸出。

2)你找到了歸屬問題,所以...

3)我猜你有一個基於 「SSH」 混帳URL。第一次以用戶身份運行SSH時,它將嘗試驗證主機密鑰(另一端的SSH標識)。如果該工具不是交互式的並且您尚未接受該密鑰,則SSH的默認行爲將失敗。或者,如果您接受了密鑰,但您已經看到了相同的行爲,但此後已更改。你會以不同的方式解決這兩個不同的問題

解決這個問題的「正確」方法是手動運行命令(以具有相應HOME變量集的用戶身份)並手動接受密鑰,以便後續命令將「正常工作」。

另一種可能性是重寫SSH的默認行爲 - 請參閱「StrictHostKeyChecking」SSH選項的文檔。你可以在命令行上通過一些黑客行爲來傳遞它,或者創建一個指定選項的〜/ .ssh/config文件。 (注意:我推薦第一個解決方案,除非你瞭解安全含義,否則不推薦這個解決方案。)

最後,我懷疑你還需要設置你的SSH私鑰以允許你像用戶一樣好。