我有一个 debian 网络服务器,上面运行着 subversion。
我正在尝试使用提交后脚本来更新我的网站的暂存版本。
#!/bin/sh
/usr/bin/svn update /home/sites/example.com/www >> /var/log/svn/example.log 2>&1
如果我以用户“derek”身份登录命令行运行该命令,那么一切正常
但是当它作为提交后运行时我的日志文件中出现以下错误:
svn: Can't open file '/home/sites/example.com/www/.svn/lock': Permission denied
好的,所以我意识到这里发生的事情是调用提交后脚本的用户不是“derek”,所以它没有权限。
所以我的问题是哪个用户正在调用提交后脚本。
svnserve 守护进程以 derek 的身份运行...我认为这意味着提交后命令也将被称为 derek,但似乎并非如此。
任何想法我如何才能找出用户正在调用它
其次,允许该用户访问的最佳实践方法是什么?我认为将其添加到组不会有帮助,因为该组默认对 .svn 目录没有写权限。
更新:我刚刚发现 www-data 似乎是调用该脚本的用户。现在 www-data 自然无法运行 svn 命令。
答案1
who am i >> /var/log/svn/example.log
将输出该命令在哪个用户下运行。
答案2
嗯。钩子以 svnserve 所用的用户身份运行。
http://svnbook.red-bean.com/en/1.5/svn.reposadmin.create.html#svn.reposadmin.create.hooks
Subversion 以拥有访问 Subversion 存储库的进程的同一用户身份执行钩子。在大多数情况下,存储库是通过 Subversion 服务器访问的,因此此用户与系统上运行服务器的用户是同一个用户
答案3
我让它工作了。我不得不自己写 C 程序,但它工作了!
感谢我在这里找到的信息: http://forum.webfaction.com/viewtopic.php?pid=216#p216