【问题标题】:how to run svn update via svn post-commit hook如何通过 svn post-commit hook 运行 svn update
【发布时间】:2010-12-02 23:21:34
【问题描述】:

目标:用最新的 svn 提交更新 /var/www

ubuntu 服务器 10.10,最新 apache2,最新 svn,位置:/var/svn/[projectname]

为此,我创建了一个简单的提交后脚本:

#!/bin/bash

#tests if www-data user runs this script on commit (which it does)
touch /tmp/test.log

#works when run from the command line (sudo ./post-commit) but not when run by www-data
sudo /usr/bin/svn update /var/www

为了解决第二个命令无法作为 www-data 工作的问题,我尝试过...

编辑:sudo visudo 并添加(在末尾):www-data ALL=(ALL) NOPASSWD:ALL

Chowing:/var/wwwwww-data:www-data

Chmoding:/var/www 到 777 的全部

仍然没有运气...有什么想法吗?

【问题讨论】:

  • 您遇到什么错误? cron 应该通过电子邮件发送任何标准错误输出。

标签: linux svn apache ubuntu post-commit


【解决方案1】:

如果你运行这个会怎样:

  su - www-data -c '/usr/bin/svn update /var/www'

(如果 /var/www/ 是 777 并且由 www-data 拥有,则不需要 sudo ..)

作为根用户? (然后将 suid()s 作为 www-data 并运行命令)。 它应该提供更多关于实际失败的信息。

或者,您可以尝试从提交后挂钩记录svn update 输出:

/usr/bin/svn update /var/www &> /tmp/my-svn-update.log

我认为这两个测试应该会给你更多关于发生了什么的信息。

旁注:我不确定你真的想冒险让 www-data 能够以 root 用户身份运行任何命令。如果你绝对需要让它运行 svn以 root 身份(我看不到这一点,但它可能是),只需在 /etc/sudoers 中使用它:

www-data ALL=NOPASSWD: /usr/bin/svn

【讨论】:

    【解决方案2】:

    我首先使用了您建议的日志记录机制,这有助于修复它!谢谢!

    输出的错误与无法转换为 UTF-8 的 repro 中的文件名有关。我删除了文件,它工作。但是为什么直接调用 post-commit 时它会起作用......我不知道。

    顺便说一句,我误认为它是 bash(它是 sh),所以我不得不将 &> 更改为 2>

    另外,我删除了签出的文件,在 /var/www 上将权限和所有者重置为正常,然后再次签出。

    我最后的 sudoers 行:

    www-data ALL=NOPASSWD:/usr/bin/svn update /var/www
    

    非常感谢您的帮助!

    【讨论】:

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