Debian下将Subversion(SVN)的svnserve加入启动服务项
提醒:本页面将不再更新、维护或者支持,文章、评论所叙述内容存在时效性,涉及技术细节或者软件使用方面不保证能够完全有效可操作,请谨慎参考!
前面两篇文章简单的介绍了SVN的使用,其中讲到了如何通过svnserve直接启动SVN服务,但是每次都使用
svnserve -d -r ~/repos
这样的命令还是略显麻烦,尤其是当我们需要停止或者重启svnserve时还要调用kill命令,十分不便,接下来介绍的是如何将其作为系统服务,让其可以被Debian的invoke-rc.d命令管理。
说是系统服务,说白了就是我们需要启动脚本,大家可以到
/etc/init.d
路径下看到一堆启动脚本,比如有我们熟悉的nginx,有了初始脚本(initscript)我们就可以通过update-rc.d创建文件链接的方式将其链入启动级别(runlevel)中去了,同样也可以被invoke-rc.d管理。
你可以随意查阅
/etc/init.d
路径下的某些程序的脚本文件,大体上能知道这类文件的写法,当然今天我不是介绍initscript的写法的,更何况网上已经有现成的脚本可用了,参考文章
《running Subversion's svnserve on a Debian system》
,我将其脚本修改如下:
#!/bin/sh
### BEGIN INIT INFO
# Provides: subversion
# Required-Start: $local_fs $remote_fs $network $syslog
# Required-Stop: $local_fs $remote_fs $network $syslog
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: starts the subversion daemon
# Description: starts subversion using start-stop-daemon
### END INIT INFO
# sudo svnserve -d -r /home/pi/repos
# http://www.everville.de/pages/howtos/linux/svnserve/index.html
# start/stop subversion daemon
test -f /usr/bin/svnserve || exit 0
# 这里是svnserve执行的参数,/home/pi/repos改为你自己的版本库地址
OPTIONS="-d -T -r /home/pi/repos"
case "$1" in
start)
echo -n "Starting subversion daemon:"
echo -n " svnserve"
# 这里的pi:pi为member:group,即用户:组名,改为适合你自己的
start-stop-daemon --start --quiet --oknodo --chuid pi:pi --exec /usr/bin/svnserve -- $OPTIONS
echo "."
;;
stop)
echo -n "Stopping subversion daemon:"
echo -n " svnserve"
start-stop-daemon --stop --quiet --oknodo --exec /usr/bin/svnserve
echo "."
;;
reload)
;;
force-reload)
$0 restart
;;
restart)
$0 stop
$0 start
;;
*)
echo "Usage: /etc/init.d/subversion (start|stop|reload|restart)"
exit 1
;;
esac
exit 0
大家可能注意到了BEGIN INIT INFO这样的信息,这其实是LSB信息,里面标识着这个服务运行的参数,当然在Debian 5及以下版本的系统中可以略去,但是在Debian 6及最新系统中会提示missing LSB information的错误信息,LSB信息是可以被服务加载器读取的,建议大家在不明白的情况下不要变动。
将上面的脚本按注释提示修改后保存为subversion文件,路径为
/etc/init.d
,添加执行属性:
chmod +x /etc/init.d/subversion
添加启动项:
update-rc.d /etc/init.d/subversion defaults
当然这个方法可能在Debian 6及高版本的Debian下不再适用,不过通过LSB信息,我们可以直接使用insserv命令来安装服务。
insserv -v -d /etc/init.d/subversion