Php Subversion钩子不会运行';svn更新';当从bash提示符运行时,将自动运行
我已经创建了一个subversion钩子,它可以做各种事情,包括发送电子邮件和更新服务器上的工作副本。当从bash propt运行时,它可以完美地工作。当在提交时通过TortoiseSVN或Netbeans运行时,会发送电子邮件等,但不会执行更新,也不会出现错误。该文件是一个php文件,我使用backtick方法运行bash命令。运行其他bash命令来撰写电子邮件,因此这不是问题所在 下面是应该运行更新并记录结果的行$位置从工作副本位置的数据库中提取Php Subversion钩子不会运行';svn更新';当从bash提示符运行时,将自动运行,php,svn,tortoisesvn,hook,Php,Svn,Tortoisesvn,Hook,我已经创建了一个subversion钩子,它可以做各种事情,包括发送电子邮件和更新服务器上的工作副本。当从bash propt运行时,它可以完美地工作。当在提交时通过TortoiseSVN或Netbeans运行时,会发送电子邮件等,但不会执行更新,也不会出现错误。该文件是一个php文件,我使用backtick方法运行bash命令。运行其他bash命令来撰写电子邮件,因此这不是问题所在 下面是应该运行更新并记录结果的行$位置从工作副本位置的数据库中提取 $update_output = `/usr
$update_output = `/usr/local/bin/svn update /home/$location >> update.log`;
谢谢
詹姆斯
编辑,更完整的脚本:
#/usr/local/bin/php
根4231 0.0 0.0 61180 748分/0秒+17:09 0:00 grep svnserve
这是因为我以root身份运行它吗?但是,如果它是以root用户身份运行的,那么应该没有权限问题?我假设“SVN hook”是指由服务器执行的。请注意SVN手册中的以下警告:
出于安全原因,颠覆
存储库使用
一个空的环境,也就是说,没有
环境变量已经设置好了,
甚至不包括$PATH(或%PATH%,在下面)
窗户)。因此,许多
管理员在他们的
钩子程序可以手动运行,但是
由Subversion运行时不工作。
确保显式设置任何
环境中必要的环境变量
您的钩子程序和/或使用绝对
程序的路径
在这种情况下,缺少$PATH意味着您必须使用svn的完整路径调用它,例如/usr/bin/svn
edit:由于svn update
即使使用完整路径也无法工作,因此我将尝试如下方式记录错误输出:
$update_output = `/usr/local/bin/svn update /home/$location 2>>/var/tmp/update-error.log`;
edit2:正如svn update
的错误输出所示,这是一个权限问题。找出脚本以哪个用户的身份运行(例如,通过在脚本中执行whoami>/var/tmp/whoami output
),并确保允许该用户操作您尝试更新的工作副本。我遇到了相同的问题,修复了以下问题:
#add apache user to group of target svn folder (project folder):
usermod -a -G [group_of_current_target_svn_folder] [apache_user, e.g. dhapache]
#change owner of target svn folder:
D=/home/pfu5er/public_html/dev2
chown -R [apache_user, e.g. dhapache] $D
SVN作为什么用户运行?可能是因为权限问题吗?我不确定,它可以运行svnlook,现在我已经用svn命令的完整路径替换了svn。我怎样才能知道它是以什么用户的身份运行的?如果您有权访问命令行,请运行ps aux | grep svnserve
…如果不是权限,您如何从命令行执行它php script.php
?或者/script.php
?你在顶部加了“她砰砰”一行了吗<代码>#/bin/php
(或者您的php二进制文件的路径是什么)?它有#/顶部是usr/local/bin/php。我正在执行它。/post commitI在看到上面提到的内容后,昨天将路径更改为/usr/local/bin/svn,这是svn在我机器上的位置,但它仍然不起作用。我将更新上面的代码片段。@jaz9090:您必须为您调用的所有可执行文件使用完整路径。仅查看脚本的前几行就可以看出您在调用“svnlook”时没有完整的路径。@jaz9090:有趣的是,我对此没有任何解释。我已经尝试了您所说的内容,并更新了上面的代码段,但它仅在我手动执行时才起作用。我将尝试上面的错误日志当我尝试错误日志记录时,我手动执行时会得到'sh:$1:模糊重定向',然后在日志文件中更新为3041版本的'U/home/domains/public\U html/domains/test.html'。但提交时没有任何内容(电子邮件仍然正确发送)。不,这只是意味着您以root用户身份运行了grep svnserve
,没有别的了。如果这是你从ps aux | grep svnserve中得到的唯一东西,那么这就意味着svnserve当时没有运行。如果是权限问题,那么脚本的其余部分也不会工作吗?我运行了id-un,结果显示它是以“nobody”的身份运行的,我必须仔细检查签出的副本,这样它才能正常运行“无人”拥有。所以当在签出目录:chownnobody:nobody-R中时。
#add apache user to group of target svn folder (project folder):
usermod -a -G [group_of_current_target_svn_folder] [apache_user, e.g. dhapache]
#change owner of target svn folder:
D=/home/pfu5er/public_html/dev2
chown -R [apache_user, e.g. dhapache] $D