【问题标题】:SVN Post-Commit Hook to Publish Website?SVN Post-Commit Hook 发布网站?
【发布时间】:2017-01-31 19:09:05
【问题描述】:

我在免费的 EC2 AWS 服务器上安装了一个 SVN 实例。简而言之:我正在使用 LAMP。

使用我在this article 中阅读的内容,遇到了 cmets 中提到的“您需要 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 &

【问题讨论】:

    标签: linux shell svn amazon-ec2


    【解决方案1】:

    第一个可能的问题:

    您不能依赖钩子内的 $PATH 变量的值。这意味着您需要为所有可执行文件指定完整路径。

    特别是,“su”是大多数发行版中位于“/bin/sh”中的程序。可以肯定的是,输入

    type su

    下一个可能的问题:

    您的颠覆服务器是否以 root 身份运行? su 如果由其他用户运行,将尝试询问密码,如果不是以交互方式运行,则会失败 - 即使用户在 sudoers 文件中!

    如果您使用的是 Apache+DAV,这意味着 apache 服务必须以 root 身份运行才能运行(而不是 www-data),这是一个严重安全问题。

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

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

    然后从钩子和 svn-post-commit-update-mysite 文件中删除 sudosu

    【讨论】:

    • 更改所有权并从文件中删除 sudo/su 命令有效,非常感谢!
    【解决方案2】:

    我最好的猜测是脚本中的某些内容取决于 PATH 环境变量。出于安全原因,Subversion 在空环境中运行挂钩。因此,您需要在 shell 脚本中设置环境或使用绝对路径。

    您可能想阅读Subversion book entry on implementing hook scripts。我提到的特定问题在信息块中进行了解释。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-13
      • 1970-01-01
      • 1970-01-01
      • 2013-01-07
      • 2012-07-27
      • 2020-01-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多