2011-06-11 80 views
1

我想要做SVN更新更簡單 - 調用PHP腳本。用svn更新php和ssl

我創建的PHP腳本:

$cmd = "svn update https://___/svn/website /var/www/html/website/ 2>&1"; 
exec($cmd, $out); 

由於運行腳本的用戶阿帕奇(不是root),我得到一些權限錯誤。

如果我將每個目錄的所有者更改爲apache(或將所有內容更改爲777),我還有另一個問題。因爲我使用https協議,用戶apache應該永久接受svn服務器的證書。我試圖做「su - apache」並接受證書,但操作系統說「apache」不是有效的用戶。我也不知道如何使用exec()函數接受證書。

有什麼想法?我怎樣才能讓svn更新更簡單?

+0

有沒有一個httpd用戶? – cwallenpoole 2011-06-11 23:39:09

回答

3

錯誤是否告訴您用戶不是有效的svn用戶?如果apache是​​運行httpd的用戶,你應該可以使用它。這是我使用的腳本:

/usr/bin/svn --config-dir=/home/user/.subversion --username=svnuser --password=svnpass update 

一旦保存密碼,您可以將其從命令中刪除。再次確保上面的用戶/通過是有效的SVN用戶。

最近我實際上已經遷移到使用Hudson的svn更新,因爲您可以安排它以及手動運行並執行一堆其他任務,此外您可以查看每個提交的svn日誌以及任何控制檯錯誤。

+0

我手動更改apache用戶的/ etc/passwd文件(將/ sbin/nologin更改爲/ bin/bash)。比我能夠做到「su - apache」並且在服務器上存儲證書。唯一要做的就是使用--config-dir選項,比如上面提到的ldg ..謝謝! – knagode 2011-06-12 00:55:04

1

在shell上使用getent apache。這將返回apache的shell。很可能,它是/ bin/nologin或/ bin/false。將其更改爲/ bin/bash。您還需要指定主目錄並在文件系統上創建它。

更新: getent apache實際上會返回apache用戶的/ etc/passwd文件中的條目。該字符串中的最後一個標記是shell。

+0

getent沒有任何返回。我手動更改apache用戶的/ etc/passwd文件。 – knagode 2011-06-11 23:51:25

+0

我手動更改了apache用戶的/ etc/passwd文件(用於將/ sbin/nologin更改爲/ bin/bash)。我如何指定主目錄?現在我可以執行「su - apache」並通過svn進行更新,但即使選擇「永久保存證書」,證書也不會被存儲。 – knagode 2011-06-12 00:02:54

+1

無論何時都會傳遞'--config-dir =/path/to/svnconfig'參數手動執行並在您的腳本中。 – ldg 2011-06-12 00:27:41

2

爲什麼不使用php svn functions而不是(不安全)的exec?

http://www.php.net/manual/en/function.svn-auth-set-parameter.php具有很好的認證選項示例。

+0

我也會嘗試這個選項! Tnx – knagode 2011-06-12 00:56:07

+0

@stefgosselin如何執行'svn_update','svn_commit'等操作來顯示遇到的錯誤消息? 使用'exec()'我沒有問題獲取並顯示確切的問題。 有什麼建議嗎? – nimph 2012-03-05 20:58:04

+1

@nimph不幸的是,你可能已經看到了,svn_函數返回rev。成功的數字,失敗的錯誤。我不知道你是否有宗教信仰,這些功能將被用於svn非常強大的'信仰'。如果安裝正確,它應該可以正常工作,只要腳本具有適當的連接和正確的服務器憑據即可。 – stefgosselin 2012-03-08 05:57:45