##language:zh
#pragma section-numbers on
'''
Karrigell 作为服务启动
'''
::-- ZoomQuiet [<<DateTime(2006-02-14T06:33:15Z)>>]
##[[TableOfContents]]
## 默许导航,请保留
<<Include(CPUGnav)>>



=== Zoomq的作法 ===
##startInc
 思路::
  * Windows 下面——不用想了,M$不会让你这么玩的…………
  * Uunix 下面——太太自然了,和一切服务一样!伪造成服务类的脚本来启动就好!

 * FreeBSD 环境中
{{{
#!/bin/sh
# running Karrigell as srv
echo
echo "running K!"
cd /path/to/u/Karrigell
/usr/local/bin/python Karrigell.py 2>/var/log/K.log &
echo
exit  0
}}}
 * 标准的输出导向,就可以将Karrigell 丢到后台运行了

==== rcNG ====
'''利用FreeBSD 的优秀工具,可以更加标准的管理Karrigell 服务!'''
  * 进一步的 可以编写为 rcNG 脚本更加标准化的通过,参考[[SynCvs|cvsup 的RCng 脚本]] 
 * [[http://cnsnap.cn.freebsd.org/doc/zh_CN.GB2312/books/handbook/configtuning-starting-services.html|FreeBSD 扩展应用程序配置]] 有脚本模板

 1. 改进现有启动脚本:'''runK.sh''' {{{
#!/bin/sh
# running Karrigell as srv
echo
echo "running K!"
cd /path/to/Karrigell
# 使用 daemon 命令来记录运行 pid
/usr/sbin/daemon -p /var/run/karrigell.pid /usr/local/bin/python Karrigell.py 2>/var/log/K.log &
echo
exit  0
}}}
 1. 创建 rcNG 脚本在 '''/usr/local/etc/rc.d''' 中,比如说叫:''karrigell.sh''{{{
#!/bin/sh
#
# PROVIDE: karrigell
# REQUIRE: DAEMON
# KEYWORD: shutdown

#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
# SET THEM IN THE /etc/rc.conf FILE
#
karrigell_enable=${karrigell_enable-"YES"}
karrigell_flags=${karrigell_flags-""}
#karrigell_pidfile=${karrigell_pidfile-"/var/run/karrigell.pid"}
# 奇怪的模板指示,两种声明方式都可以
karrigell_pidfile="/var/run/karrigell.pid"

. /etc/rc.subr

name="karrigell"
rcvar=`set_rcvar`
command="/path/to/u/runK.sh"
# 因为不是直接运行的进程,所以要给 rc.subr 一点提示,声明真实运行的进程特征
procname="/usr/local/bin/python"

load_rc_config $name

pidfile="${karrigell_pidfile}"

start_cmd="echo \"Starting ${name}.\"; /usr/bin/nice -5 ${command} ${karrigell_flags} ${command_args}"

run_rc_command "$1"

}}}

最后在 ` /etc/rc.conf` 中追加{{{
#rc_debug="YES"
#060421 rcNG Karrigell
karrigell_enable="YES"
## 特别注意BSD 中的语法约定,不能有空格,这里!
}}}

 * 唉呀呀!好也!就可以通过{{{
#/usr/local/etc/rc.d/karrigell start
#/usr/local/etc/rc.d/karrigell stop
}}}
 的标准方式来进行服务管理了

##endInc