2014-01-12 115 views
0

我已經在免費的EC2 AWS服務器上安裝了SVN實例。總之:我正在使用LAMP。SVN後提交鉤子發佈網站?

使用我在this article中讀到的內容,遇到註釋中提到的「您需要TTY」錯誤。我跟着second resource,它清除了錯誤信息,但似乎沒有執行腳本。但是,當我手動運行腳本時,它可以工作。

任何線索我失蹤了?

當我跟着第二資源修復TTY的錯誤,我改變了我的/ SVN /庫/掛鉤的內容/後提交腳本:

#!/bin/bash 
sudo /usr/local/bin/svn-post-commit-update-mysite 1>&2 

到:

#!/bin/bash 
su –session-command=」/usr/local/bin/svn-post-commit-update-mysite 1>&2″ dynamic & 

回答

1

第一個可能的問題:

您不能依賴鉤子中$ PATH變量的值。這意味着您需要爲所有可執行文件指定完整路徑。

特別是,「su」是位於「/ bin/sh」中的程序,在大多數發行版中。可以肯定,類型

type su

下一個可能的問題:

是您的Subversion服務器正在以root身份運行?如果其他用戶運行,su將嘗試詢問密碼,如果不是交互式運行,將會失敗 - 即使用戶在sudoers文件中!

如果您使用的是Apache + DAV,這意味着Apache服務必須以root用戶身份運行(而不是www-data),這是一個嚴重的安全問題。

如果所有文件都屬於同一用戶(例如www-data),您可能完全不需要使用susudo。您可以更改站點文件的所有權的東西,如

sudo chown -R www-data:www-data /var/www/<my-project>

再從鉤和兩個去除sudosu SVN-後提交,更新mysite的文件。

+0

更改所有權並從工作文件中刪除sudo/su命令,非常感謝! – Bing

0

我最好的猜測是你的腳本中的東西取決於PATH環境變量。出於安全原因,Subversion在空閒環境中運行鉤子。所以你需要在shell腳本中設置環境或使用絕對路徑。您可能想要閱讀Subversion book entry on implementing hook scripts。我提到的特定問題在信息塊中進行了解釋。