是否有一个既定的配置文件来运行 SubGit 作为 upstart 服务?

是否有一个既定的配置文件来运行 SubGit 作为 upstart 服务?

看来 upstart 是在重启过程中关闭和启动它们的正确方法,但我在搜索 SubGit 文档和网络常规搜索后未能找到配置文件。

我的情况中的启动和停止命令很简单,但是用户名和 repo 路径都依赖于用户安装:

sudo -u subgit subgit install /dev.git    # start
sudo -u subgit subgit uninstall /dev.git  # stop

我即将实现 /etc/init/subgit.conf 的工作副本(不要与 SubGit 中的 SVN_REPOS/conf/subgit.conf 混淆)并将发布等待更好的答案。

注意:SubGit 是桥接 Subversion 和 Git 的一种特殊实现。

答案1

尽管启动命令很简单,但它调用了一个 Java 程序,该程序似乎会多次 fork,从而导致 upstart 问题。幸运的是,约翰·詹姆斯·米勒发布解决方法针对此类问题,请提交至 StackOverflow。

虽然以下内容似乎为实例参数化的 subgit 命令提供了 upstart 包装器(允许在服务器上运行多个存储库),但使用基于“实例”的作业使得自动启动/停止变得不切实际。相反,我已将存储库的启动命令添加到 /etc/rc.local(显示在底部)。

# subgit.conf - subgit job file

description "service for running SubGit mirroring"
author "Randy Sage"

# Note: because subgit forks too many times, normal upstart controls do not work
# Instead, use the method at https://stackoverflow.com/a/12217085/527489

# Run with subgit/gitshare ids, since we use shared gitshare access to repos
setuid subgit
setgid gitshare

instance $repo

pre-start exec subgit install $repo  # actually start

script  # dummy process tracking java app
  while ps aux |  grep "java.*$repo" | grep -v grep >/dev/null ; do
    sleep 1
  done
end script

post-stop script
  if ps aux |  grep "java.*$repo" | grep -v grep >/dev/null ; then
    subgit shutdown $repo
  fi
end script

以下是 /etc/rc.local 命令:

...
start subgit repo=/matlab.git
start subgit repo=/dev.git

exit 0

请注意,以这种方式启动的服务会出现在 下initctl list,但不会出现service --status-all

rsage@subgit:~$ initctl list | grep subgit
subgit (/dev.git) start/running, process 2974
subgit (/matlab.git) start/running, process 2507

相关内容