欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

CentOS6自定义服务控制脚本

程序员文章站 2022-04-10 14:56:08
...

简介

我们在编译安装一些服务时候,如果想要更方便的启动关闭服务,最方便的就是使用系统给的service(CentOS6及以前)或systemctl(CentOS7)来控制,可是怎么才能定义它们呢?当然是需要自定义脚本了,两种工具不一样,定义的脚本也不一样。下面跟着我,我们试着定义这些脚本^_^

CentOS6自定义服务脚本

创建脚本

CentOS6的服务脚本都是存放在/etc/init.d这个目录中,只有在这个目录下面,脚本才可以被service和chkconfig控制,以sshd服务脚本为例,我们就在这个目录创建testsrv脚本吧

1.自定义脚本格式

vi /etc/init.d/sshd
#!/bin/bash     #shebang机制
#
# sshd          Start up the OpenSSH server daemon
#
# chkconfig: 2345 55 25
# description: SSH is a protocol for secure remote shell access. \
#              This service starts up the OpenSSH server daemon.

说明:
(1).定义脚本必须定义的行是shebang机制,chkconfig和description这三行
(2).chkconfig中2345
chkconfig是一个管理开机启动程序
代表在使用chkconfig –add sshd加入chkconfig列表时候,对应启动模式开机时候是否自动启动(linux对应6个状态模式),如果将2345改为-,则代表所有这些模式都不开机启动。
我们可以看一下sshd服务在不同状态模式下是否设为开机启动,如下,我们发现2345模式下是on,

[root@CentOS6 ~]# chkconfig --list sshd
sshd            0:off   1:off   2:on    3:on    4:on    5:on    6:off
#发现对应2345模式是on状态

(3).chkconfig中的55和25
系统在启动时候,是有一定的启动顺序的,关机时候也是有顺序的。那么为什么会要求有顺序呢?系统的服务是有依赖的,比如说sshd服务,需要网络服务,如果在网络服务还没有启动起来的时候就启动sshd服务,那肯定会导致sshd服务启动不起来,同样,在关机时候如果先关掉网络服务,sshd将会因为网络的中断而导致未知错误,因此要定义服务启动顺序。
我们来查看3模式下,服务启动的脚本
CentOS6自定义服务控制脚本
发现里面都是软连接,分为K和S系列的,查看一下软连接的指向,发现都是指向的是init.d中的服务脚本,如下:

[[email protected] ~]# ls -l /etc/rc.d/rc3.d/S55sshd 
lrwxrwxrwx. 1 root root 14 May 17 14:10 /etc/rc.d/rc3.d/S55sshd -> ../init.d/sshd

让我来告诉你为什么吧。
是因为服务开机时候,如果进入的是3多用户模式,按照字符顺序执行此/etc/rc.d/rc3.d/中软连接,开机执行的是S(start)开头的软连接,关机执行的是K(kill)的软连接,那么排列在前面的软连接自然要先执行,这样就可以控制服务的启动顺序了。
因此我们在自定义脚本时候,尽量将第一个数写大,第二个数写小,这样在保证所有其他服务开启后,启动我们自定义的脚本,关机时候我们自定义的服务先关掉后再关掉其他服务。有没有觉得设计的很奇妙。

现在回到55和25。在加入chkconfig管理时候,55则代表开机启动时候生成S55sshd的软连接,25代表生成K25sshd的软连接。

(4).description行,顾名思义,是描述信息。在centos4,5中,必须写,在centos6中,可以不需要定义

2.自定义脚本示例

创建一个简单的脚本,功能实现不是太完整,还有bug,但是我们的目的是为了演示是否成功,如果在企业内,就需要严谨起来了,此处我们创建一个testsrv服务脚本

vi /etc/init.d/testsrv
#!/bin/bash
#chkconfig: - 99 01
##
#description: this is a test custom script!
case $1 in
        start)
        ping 127.0.1
        echo testsrv is running...

        ;;
        stop)
        kill `pidof ping`
        echo testsrv is stoped
        ;;
        *)
        echo Usage:`basename $0` start|stop|restart
esac

我们在定义脚本时候,chkconfig第一个参数尽量写大,第二个参数尽量写小

[root@CentOS6 ~]# chkconfig --add testsrv
[root@CentOS6 ~]# chkconfig --list testsrv
testsrv         0:off   1:off   2:off   3:off   4:off   5:off   6:off

测试

加入开机启动

1.先赋予脚本执行权限
2.加入chkconfig管理列表

chkconfig --add testsrv

3.检查是否在对应状态下生成软连接
由于定义的在所有模式下都不是开机启动的,因此不会生成S开头的脚本
那么我们设定在3模式下开机启动

[root@CentOS6 ~]# chkconfig --level 3 testsrv  on
[root@CentOS6 ~]# chkconfig --list testsrv
testsrv         0:off   1:off   2:off   3:on    4:off   5:off   6:off
[root@CentOS6 ~]# ls  /etc/rc.d/rc3.d/S99testsrv 
/etc/rc.d/rc3.d/S99testsrv

service控制

CentOS6自定义服务控制脚本
发现已经成功,只不过最后面显示running,是因为ping有标准输出,而echo又在ping的后面,所以结束后会显示这一行字符。