Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/255.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Subversion钩子不会运行';svn更新';当从bash提示符运行时,将自动运行_Php_Svn_Tortoisesvn_Hook - Fatal编程技术网

Php Subversion钩子不会运行';svn更新';当从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

我已经创建了一个subversion钩子,它可以做各种事情,包括发送电子邮件和更新服务器上的工作副本。当从bash propt运行时,它可以完美地工作。当在提交时通过TortoiseSVN或Netbeans运行时,会发送电子邮件等,但不会执行更新,也不会出现错误。该文件是一个php文件,我使用backtick方法运行bash命令。运行其他bash命令来撰写电子邮件,因此这不是问题所在

下面是应该运行更新并记录结果的行$位置从工作副本位置的数据库中提取

$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