本文告诉你如何将脚本当成一种系统服务,开机的时候能够自动运行,关机的时候也能够自动关闭(非强行关闭)。
chkconfig将发挥巨大威力
linux系统的服务都放/etc/rc.d/init.d目录下。
但是仅仅把脚本放在里面,系统是无法带起的,必须在/etc/rc.d/rc0.d~rc6.d目录下分别要创建一些软链接,而且链接的名字必须以K或者S打头,S打头表示在开机的时候自动给init.d目录下的脚本自动传递start参数,K打头就是传递stop参数.
对各个运行级的详细解释:
0 为停机,机器关闭。
1 为单用户模式,就像Win9x 下的安全模式类似。
2 为多用户模式,但是没有NFS 支持。
3 为完整的多用户模式,是标准的运行级。
4 一般不用,在一些特殊情况下可以用它来做一些事情。
例如在笔记本电脑的电池用尽时,可以切换到这个模式来做一些设置。
5 就是 X11 ,进到 X Window 系统了。
6 为重启,运行 init 6 机器就会重启。
以上表示/etc/rc.d/rc0.d中的链接就是在机器关闭的时候起作用。依次类推。
如果手动去一条条的创建链接,那么效率也太低了。而且容易出错。(以一个test脚本为例)
首先要把test脚本copy到/etc/init.d目录下,然后
$ cd /etc/init.d
$ chkconfig --add test
这样就会自动添加链接了。但是仅靠这条命令怎么只能在0~6的文件夹下创建K还是S打头的链接呢。
这就需要进一步做处理了,那就是在test脚本开始部分添加一下代码:
#chkconfig: 2345 88 12
注意开始的"#"号不能少。2345就是代表在rc2~5.d目录下创建S打头的链接。88就是代表在88位启动test服务。12就是在关机时第12位关闭。也就是在2345中的链接名为S88test,0,1,6中链接名为K12test。
所以这都是环环相扣的,缺一不可。
但是这么设置了开机的test脚本确实可以接受到start参数。但是发现关机的时候却还是不能接受到stop参数
这是怎么回事呢?还要进一步做处理。
有没有发现系统提供的脚本中的start函数中都有以下这句话:
[ $RETVAL -eq 0 ] && touch /var/lock/subsys/test
系统关闭的过程(发出关闭信号,调用服务自身的进程)中会检查/var/lock/subsys下的文件,逐一关闭每个服务,如果某一运行的服务在/var/lock/subsys下没有相应的选项。
在系统关闭的时候,会像杀死普通进程一样杀死这个服务。
所以这样就可以确保在关闭的时候脚本能够正常接受到stop参数
再介绍两条命令:
#删除服务
$ chkconfig --del test
#查看服务
$ find /etc/rc.d -name '*test' -print
怎么样,其实很简单吧?动手试试把。