怎样将shell脚本自定义为服务

    技术2025-08-03  23

    本文告诉你如何将脚本当成一种系统服务,开机的时候能够自动运行,关机的时候也能够自动关闭(非强行关闭)。

     

    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 怎么样,其实很简单吧?动手试试把。

     

     

    最新回复(0)