Linux service

May 21, 2013 21:04


好奇Linux的Service,于是来折腾下,说一下折腾心得

首先环境是在Ubuntu12.04下,service脚本位于 /etc/init.d 目录中, 以GoAgent为例来写一个service开机启动, 于/etc/init.d/goagent文件中:

#! /bin/sh -e

### BEGIN INIT INFO
# Provides: GoAgent
# chkconfig: 345 20 80
# default-start: 3 4 5
# default-stop: 0 1 2 6
### END INIT INFO

N=/etc/init.d/goagent
app_dir=/home/myhome/goagent-2.0/local
app_path=$app_dir/proxy.py

set -e

start() {
  if [ -f $app_path ]
  then
    echo "start GoAgent service"
    python $app_path 1> /dev/null 2>&1 &
  fi
}

stop() {
  echo "stop GoAgent service"
  pid=$(ps -ef | grep "python $app_path" | grep -v grep | tr -s ' ' | cut -d ' ' -f 2)
  [ $pid ] && kill -9 $pid
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: $N {start|stop|restart}" >&2
    exit 1
    ;;
esac

exit 0
#! /bin/sh -e

### BEGIN INIT INFO
# Provides: GoAgent
# default-start: 3 4 5
# default-stop: 0 1 2 6
### END INIT INFO

上面第一行指定了用什么来解释这个脚本,这个就不多说了(其实我也半知半解的。。) 下面的注释用于指定这个service的一些参数,这个等下说自动启动时说

start() {
  echo start
}

stop() {
  echo stop
}

然后我们定义两个方法,一个start一个stop,为了方便来restart所以就这样了, restart就直接stop再start,start和stop里就写上启动我们的GoAgent和停止, stop我是直接在进程里找到GoAgent的进程强制杀掉了。。。

后面就是case传入的参数,start或是stop,如,下面的 service后面跟的就是我们服务的文件名, start就是$1参数,然后exit退出,0是正常退出

$ service goagent start

写好后我就们开始来说,开机启动了,使用 update-rc.d 来让指定service开机启动, 在文件开头的注释中,default-start 和 default-stop 后面的数字表示运行级别

update-rc.d自动读取文件中指定的运行级别,我们直接指定启动级别:

$ sudo update-rc.d goagent start 90 2 3 4 5 . stop 20 0 1 6 .

上面将 /etc/init.d/goagent 链接到 /etc/rc.x/目录中,90 与 20指启动顺序和停止顺序

总的来说还是比较简单的东西,参照下 /etc/init.d 下面的文件差不多就知道怎么回事了, 开机启动通过 update-rc.d 来管理 service 的启动很是方便

Comments:

476b73a957eaddd15ca12cefd52b198a?d=identicon&s=35@Jon.xie at July 05, 2015 20:48

start on started

console none

exec {cmd}

476b73a957eaddd15ca12cefd52b198a?d=identicon&s=35@Jon.xie at July 05, 2015 20:50

in /etc/init/my_service.conf: ``` start on started

console none

exec {cmd} ```

$ service my_service start