Skip to main content
 首页 » 编程设计

linux之SVN 提交后 Hook 发布网站

2023年11月22日50linjiqin

我在免费的 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),这是一个严重的安全问题。

您可能不需要使用 susudo如果所有文件都属于同一个用户(例如 www-data)。您可以使用类似的方式更改站点文件的所有权

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

然后删除sudosu来自钩子(Hook)和 svn-post-commit-update-mysite 文件。