红联Linux门户
Linux帮助

CentOS6自定义服务控制脚本

发布时间:2017-07-24 10:15:37来源:linux网站作者:烟雨醉梦里
简介
我们在编译安装一些服务时候,如果想要更方便的启动关闭服务,最方便的就是使用系统给的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中的服务脚本,如下:
[root@CentOS6 ~]# 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的后面,所以结束后会显示这一行字符。
 
本文永久更新地址:http://www.linuxdiyf.com/linux/32088.html