我在免费的 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 &
请您参考如下方法:
第一个可能的问题:
您不能依赖 Hook 中 $PATH 变量的值。这意味着您需要为所有可执行文件指定完整路径。
特别是,“su”是大多数发行版中位于“/bin/sh”中的程序。为了确定,请输入
type su
下一个可能的问题:
您的颠覆服务器是否以 root 身份运行? su
如果由其他用户运行,将尝试询问密码,如果不是以交互方式运行,则将失败 - 即使用户在 sudoers 文件中!
如果您使用的是 Apache+DAV,这意味着必须以 root 身份运行 apache 服务(而不是 www-data),这是一个严重的安全问题。
您可能不需要使用 su
或 sudo
如果所有文件都属于同一个用户(例如 www-data)。您可以使用类似的方式更改站点文件的所有权
sudo chown -R www-data:www-data /var/www/<my-project>
然后删除sudo
和 su
来自钩子(Hook)和 svn-post-commit-update-mysite 文件。