我在免费的EC2 AWS服务器上安装了SVN实例。简而言之:我正在使用LAMP。
使用我在this article中阅读的内容,并在评论中提到“遇到TTY”错误。我跟着second resource并清除了错误消息,但似乎没有执行脚本。但是,当我手动运行脚本时,它可以工作。
有什么线索我缺少什么?
当我按照第二个资源修复TTY错误时,我更改了我的/ svn / repository / hooks / post-commit脚本的内容:
#!/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 &
答案 0 :(得分:1)
第一个可能的问题:
你不能依赖钩子里面的$ PATH变量的值。这意味着您需要为所有可执行文件指定完整路径。
特别是,“su”是大多数发行版中位于“/ bin / sh”的程序。确定,输入
type su
下一个可能的问题:
您的subversion服务器是否以root用户身份运行?如果由其他用户运行,su
将尝试请求密码,如果没有以交互方式运行,则会失败 - 即使用户位于sudoers文件中!
如果您使用的是Apache + DAV,这意味着必须以root用户身份运行apache服务才能使用(而不是www-data),这是一个严重的安全问题。
如果所有文件都归同一用户所有(例如,www-data),则可能根本不需要使用su
或sudo
。您可以使用类似
sudo chown -R www-data:www-data /var/www/<my-project>
然后从钩子和svn-post-commit-update-mysite文件中删除sudo
和su
。
答案 1 :(得分:0)
我最好的猜测是脚本中的某些东西取决于PATH环境变量。出于安全原因,Subversion在空的环境中运行挂钩。因此,您需要在shell脚本中设置环境或使用绝对路径。
您可能需要阅读Subversion book entry on implementing hook scripts。我提到的具体问题在信息块中进行了解释。