2014-01-12 80 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。我提到的特定问题在信息块中进行了解释。