Несмотря на то, что команда start проста, она вызывает Java-программу, которая, кажется, несколько раз разветвляется, вызывая проблемы с upstart. К счастью, johnjamesmiller опубликовал обходной путь для этого типа проблемы в StackOverflow.
В то время как следующее, кажется, обеспечивает оболочку для выскочки для параметризованных экземпляром команд subgit (позволяя запускать несколько репозиториев на сервере), использование задания на основе экземпляра делает нецелесообразным автоматический запуск / остановку. Вместо этого я добавил команды запуска для своих репозиториев в /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