将 Subversion post-commit hook 作为后台进程运行

Ren*_*soo 5 svn background-process

因为目前我们的 Subversion post-commit 钩子执行时间太长,我一直在努力加快速度。

我一直在考虑将实际钩子作为后台进程执行,以便svn commit在实际钩子完成运行之前完成。

所以我创建了两个文件。

Apost-commit.bg做一些耗时的事情:

sleep 10
Run Code Online (Sandbox Code Playgroud)

以及post-commit在后台执行前者的实际本身:

bash post-commit.bg &
Run Code Online (Sandbox Code Playgroud)

当我从命令行运行时post-commit,它会很快完成,但post-commit.bg仍在运行。但是当我这样做svn commit时仍然需要10秒钟!

SVN 是否以某种方式不允许后台进程,或者我在这里做错了什么?

小智 12

您还需要重定向 stderr:

bash post-commit.bg 2>&1 &

这将使进程与父进程分离(就颠覆而言),让客户端无需等待即可完成。我遇到了同样的问题,这就是解决方法。


Jim*_*m T 5

我刚刚在本地确认了这一点。它似乎是设计使然:

运行挂钩,SVN电话apr_proc_wait

apr_proc_wait旨在等待所有子进程退出后再返回。这是为了避免僵尸(无主)进程超过系统。

如果您找到一种分离进程的方法(即守护进程模式),您可能会取得一些成功,但我不确定。

您可能会发现在某处运行另一个进程会更好,该进程可以响应来自 svn 的 ping 执行一些工作 - Hudson是我对此类事情的选择 - 作业可以由post-commit hook 中wget触发,或者您可以有它为您轮询颠覆,这取决于您想要做什么。