sysV init服务脚本(入门级)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sysV init服务脚本(入门级)相关的知识,希望对你有一定的参考价值。

在sysV风格的init系统中,以Centos 6.x为例,系统服务脚本一般在/etc/rc.d/init.d目录下,每个支持sysV init的脚本,一般都可以接受如下参数:

    start|stop|restart|status   //这就是我们在centos下常用的控制服务启动与停止的参数。

并且,在sysV init脚本中都会在注释中有这么一行

#chkconfig:runlevel SS KK

技术分享技术分享

因为在sysV init系统中,使用chkconfig进行服务的开机自启动管理以及各运行级别切换时要运行服务的管理。而chkconfig:runlevel SS KK就是chkconfig程序管理该脚本启动或者停止的依据,虽然它是注释的,但是chkconfig会扫描并读取它。


参照上一篇帖子,在系统启动和服务等级发生变化时,是由/etc/rc.d/rc针对不同等级下rc#.d目录中的脚本进行启动和停止。所以,我们虽然可以手动将脚本按照命名规则放到指定的rc#.d目录下,然后由rc在切换时执行,但是这样总归是操作太过复杂,linux的哲学思想就是,能不动手就不动手。。。

那么chkconfig就可以替代人工方式来进行自动的为服务脚本在指定的rc#.d下创建软链接,然后由rc控制以达到自动运行和停止的目的。


回过头来说各个字段的意义:

当chkconfig命令来为此脚本在rc#.d目录创建链接时,runlevels区域的运行等级表示默认创建为S*开头的链接,此外未指定的运行级别都默认创建为K*开头的链接。S后面的优先级为SS所表示的数字,K后面的关闭优先级为KK所表示的数字;

    一般SS+KK=99,并不是限制性的。而是透出一种规律,先开启的服务后关闭,后开启的服务先关闭。因为先开启的服务可能被其他服务所依赖,后开启的服务可能依赖其他服务。

    如果runleves区域为-,说明没有默认为S开头的链接,所有都是K的。

chkconfig的用法:
--list:列出所有目前chkconfig所能管控的服务。
--list 服务名:只显示指定服务的启动规则。
--add 服务名:将制定服务加入管控,也就是给服务在rc#.d下创建软链接。
--del 服务名:移除对指定服务的管控,也就是将服务在rc#.d下的软链接删除。
--level 运行级别 服务名 [on|off]:精细控制,指定服务在指定级别下是否自启动。如果不加--level 运行级别,则默认操作2345级别。


了解了这些,就可以尝试自己编写一个脚本,放到/etc/rc.d/init.d目录下,然后将其加入chkconfig控制,在指定级别下进行启动或者停止。

例如,写一个脚本名字叫做myservice

#!/bin/bash
#chkconfig:2345 77 22
case $1 in
start)
echo "Starting...";;
stop)
echo "Stopping...";;
restart)
echo "Restarting...";;
status)
echo "I don‘t know";;
*)
echo "please use start|stop|restart|status";;
esac

技术分享技术分享

使用chkconfig 将其加入控制,所谓加入控制就是按照脚本中chkconfig指定的信息在rc#.d下创建软链接。

chkconfig --add myservice

查看一下rc#.d目录下,可以看到已经存在了创建好的软链接,这样级别切换时就可以正常启动或者停止了。

技术分享技术分享


以上是关于sysV init服务脚本(入门级)的主要内容,如果未能解决你的问题,请参考以下文章

SHELL脚本testsrv脚本(init脚本或者SysV脚本)

如何写SysV服务管理脚本

sysV

SBT 本机打包程序不生成任何 sysv /etc/init.d/ 脚本

如何在systemd中添加service

如何将包含 SysV 初始化脚本的 RPM 包移植到 systemd?