SKLCC’s 藏经阁

We are SKLCCers, we share our knowledge with each other.

如何在Linux上新建一个Service

| Comments

From Andy, Jackson at SuZhou sklcc.com

简介

linux中的service是用于方便对系统服务进行统一标准的管理,比如启动(start),停止(stop),重启(restart)和查看状态(status)等。

service本身命令是一个shell脚本。它在/etc/init.d/目录中查找指定的服务脚本,然后调用该服务脚本进行服务。例如当我们输入service ssh status时,service程序其实是调用/etc/init.d/ssh脚本来完成获取sshd状态的功能。所以service ssh status也等同于/etc/init.d/ssh status

有时候我们需要某个程序能够开机自启动,例如apache程序。同时又要求程序在运行中可以随时停止,重启和查看状态。

这时写一个脚本,并把它注册为一个service,就变得非常有用。

service的写法

service的写法有固定的模板,自己只要完成start(),stop(),restart()等方法中的逻辑就行。以/etc/init.d/ssh脚本为例来说:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
case "$1" in  
  start)
        ...
        ;;
  stop)
        ...
        ;;
  reload|force-reload)
        ...
        ;;
  restart)
        ...
        ;;
  try-restart)
        ...
        ;;
  status)
        ...
        ;;
  *)
        ...
esac

一般自定义service脚本只需要约定俗成的实现start,stop,restart,status和*5种情况就可以了。其中*情况是用于输出service的用法的,例如ssh的*的输出就是:

Usage: /etc/init.d/ssh {start|stop|reload|force-reload|restart|try-restart|status}

至于service脚本中具体每个情况的实现需要根据具体情况而编写,这里就不赘述了。如有疑问可以参考/etc/init.d/下的其他的脚本。

注册

编写完service脚本之后,并不就意味着可以直接使用了,还需要把自定义的service脚本注册到系统里。

这里所谓的注册其实就是:

  1. 把脚本拷贝至/etc/init.d/下(本例中自定义service脚本叫test)
    sudo cp test /etc/init.d/ & cd /etc/init.d
  2. 修改脚本的权限
    sudo chmod 755 test
  3. 配置开机启动
    在ubuntu10.04之前版本和在redhat/centos/fedora中都是使用chkconfig来管理的,但是在ubuntu之后的版本就没有了,在这里我们使用update-rc.d来替代chkconfig。具体可以参考这里
    sudo update-rc.d test defaults

经过上述步骤test已经成功注册成service了,可以通过sudo service test start|stop|restart或者sudo /etc/init.d/test start|stop|restart启动,停止,重启服务 过了一段时间你不再需要服务了,运行sudo update-rc.d -f test remove卸载服务

Comments