0

目标:更新 /var/www 最新的 svn commit。

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

哭泣:/var/wwwwww-data:www-data

Chmoding:全部/var/www到 777

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

4

2 回答 2

1

如果你运行这个怎么办:

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

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

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

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

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

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

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

www-data ALL=NOPASSWD: /usr/bin/svn
于 2010-12-02T23:49:54.073 回答
0

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

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

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

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

我最后的 sudoers 行:

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

非常感谢你的帮忙!

于 2010-12-03T05:03:29.323 回答