2008-09-25 31 views
6

我的Apache服務器運行在一些非默認(非根)帳戶上。當它試圖運行一個python腳本這反過來執行顛覆checkout命令,「svn籤」失敗,出現以下錯誤信息:在apache和mod_python下運行顛覆

svn: Can't open file '/root/.subversion/servers': Permission denied 

同時運行裏面顛覆結賬命令python腳本從同一用戶帳戶下的命令行進行得非常順利。

帶有mod_python 3.2.8的Apache服務器2.2.6運行在Fedora Core 6機器上。

有人可以幫我嗎?非常感謝。

回答

0

嘗試爲該文件授予Apache用戶(運行apache服務的用戶)r + w權限。

5

這聽起來像你的Apache進程運行的環境有點不尋常。無論出於何種原因,svn似乎認爲它需要的用戶配置文件在/ root中。你可以避免SVN使用這些文件的根目錄版本通過指定命令行上使用的config目錄,比如:

svn --config-dir /home/myuser/.subversion checkout http://example.com/path 

雖然沒有固定的enviornment,它至少會允許你有你的腳本正常運行...

+0

大加讚賞,道格拉斯,這迅速解決,我有同樣的問題。 – 2011-04-28 19:29:50

0

Apache的錯誤日誌不給你一個線索嗎?

也許它與SELinux有關。檢查/var/log/audit/audit.log並相應地調整你的SELinux配置,如果audit.log文件指出它是拒絕Apache訪問的SELinux。

0

Permission Denied錯誤顯示腳本以root用戶憑據運行,因爲它正在root的主目錄中查找文件。

我建議你換鉤腳本來的東西做:

id > /tmp/id 

,這樣就可以檢查的結果,以確保UID/GID和EUID/EGID是什麼。您可能會發現它並不像您認爲的那樣正在運行。

我的第一個猜測,就像Troels一樣,也是SELinux,但如果你確定通過Apache運行的腳本與你手動測試的用戶/組完全相同,那麼這只是我的猜測。

0

恩,謝謝所有回答問題的人。無論如何,我想我已經解決了神祕事件。

SELinux在機器上完全禁用,所以問題是'svn co'無法爲其運行的用戶帳戶找到config_dir。

Apache/mod_python沒有在Apache運行的用戶帳戶的shell環境中讀取。因此,對於examle沒有$ HOME通過mod_python的當Apache 下一些真正的用戶(沒有人)

現在的「svn合作」有一個標誌--config-dir的指向配置目錄讀取PARAMS運行見過。默認情況下它是$ HOME/.subversion,即它對應於用戶帳戶主目錄。顯然,當沒有$ HOME存在mod_python去根目錄dir(/根),並試圖擺弄。顛覆內容 - 顯然 失敗慘敗。

SETENV HOME /家用/ QA

到/etc/httpd/conf/httpd.conf中沒有解決,因爲無關使用shell環境SETENV的問題 - 只有它套阿帕奇相關的環境

同樣PythonOption - 僅設置了mod_python可與

運行後req.get_options()讀取相關的變量「SVN共同--config-DIR /家/ ......」肯定給runni的解決方法ng從mod_python中,但阻礙那些將嘗試從命令行運行腳本的人。

所以所提出的(和工作)的解決方案是之前開始appache設置HOME環境變量。

例如在/etc/init.d/httpd腳本

QAHOME=/home/qa 
    ... 
    HOME=$QAHOME LANG=$HTTPD_LANG daemon $httpd $OPTIONS 
0

正在發生的事情就是Apache正在啓動以root的環境變量,因此它認爲它應該找到它的配置文件/根/。不是這種情況。 發生的事情是,如果你做須藤apache2ctl開始,它拉你的$ HOME變量從須藤$ HOME = /根/

我剛剛找到了解決這個問題我自己(雖然mod_perl的,但同樣的事情)

運行此命令(如果它的Apache 1,去除2):

sudo /etc/init.d/apache2 stop 
sudo /etc/init.d/apache2 start 

當/etc/init.d/apache2啓動Apache的,它集所有的Apache應該下運行適當的環境變量。