在centos6如何添加开机启动服务

在centos6中启动某项服务都是用一条service的命令跟服务名来启动关闭(重启),或者查看状态的。只要安装某项服务直接service命令就可以执行三种状态,今天就跟我一起来看看怎么用一个简单的小脚本来用service命令执行它并设置成开机启动!

#我实现写好了一个名叫mydeamon的脚本

首先看看我的脚本里都写了些什么:

case $1 in

[Rr][eE][sS][Tt][aA][Rr][Tt])
        re        re调用重启的函数
        ;;
[Ss][Tt][Aa][Tt][uU][Ss])
        ss        ss查看状态的函数
        ;;
[sS][Tt][aA][Rr][Tt])
        st        st表示开启服务的函数
        ;;
[sS][Tt][Oo][Pp])
        sp        sp表示关闭服务的函数
        ;;
*)
        echo "请输入正确参数!"
        ;;
esac

注释:1上面re,st,ss,sp是我定义的四个函数

   2函数定义了当脚本接到start命令时在/var/lock/下创建一个文件,当在执行时也就是文件存在时判断文件是否存在。若存在,报出服务正在运行的启动错误

   3 stop参数也是判断文件是否存在存在表明服务在运行,删掉文件表示停止服务。若已经停止再次接收到stop参数,也就是没有文件存在,先判断文件是否存在,不存在报错服务没有运行。

   4 restart 先停止在启动,若本没有运行报出停止错误的报错,执行启动。

   5 status 查看运行状态,判断文件是否存在,存在给出提示(比如deamon is running)不存在则显示没有运行。

首先看一下重点,虽然上面扯了一堆注释,写了个case来接受执行脚本时给脚本传递的参数,现在执行脚本给个start的参数看看什么效果。

[root@centos9 1]# ./mydeamon start
./mydeamon start				[  o k  ]
[root@centos9 1]#

现在来看是不是跟启动系统服务好像啊.....现在还是执行脚本来显示了个ok字样而已!对了现在已经执行了一遍start,也就是启动服务了已经,在执行一次start会怎么样呢?

[root@centos9 1]# ./mydeamon start
./mydeamon is running			[ false ]
[root@centos9 1]#

都知道false一般启动服务是失败时才会出现的字眼,现在表明启动失败了,为什么呢?因为已经在运行了怎么能在启动一遍呢。

既然这样其他的stop,restart,status我就不一一执行了直接来看怎么才能用centos6里面自带的service来执行这个脚本。


首先介绍一个目录,对!!!很重要的目录!!!

[root@centos9 1]# cd /etc/init.d/
[root@centos9 init.d]# 
[root@centos9 init.d]# 
[root@centos9 init.d]# ls
abrt-ccpp         httpd         oddjobd       rsyslog
abrtd             ip6tables     openct        sandbox
abrt-oops         iptables      ospf6d        saslauthd
acpid             irqbalance    ospfd         single
atd               kdump         pcscd         smartd
auditd            killall       portreserve   snmpd
autofs            lvm2-lvmetad  postfix       snmptrapd
bgpd              lvm2-monitor  pppoe-server  spice-vdagentd
blk-availability  mdmonitor     psacct        sshd
bluetooth         messagebus    quota_nld     sssd
certmonger        mydeamon      rdisc         svnserve
cpuspeed          mysqld        rdma          sysstat
crond             netconsole    restorecond   udev-post
cups              netfs         ripd          watchquagga
dnsmasq           network       ripngd        wdaemon
firstboot         nfs           rngd          winbind
functions         nfslock       rpcbind       wpa_supplicant
haldaemon         nfs-rdma      rpcgssd       xinetd
halt              ntpd          rpcidmapd     ypbind
htcacheclean      ntpdate       rpcsvcgssd    zebra
[root@centos9 init.d]#

这个/etc/init.d/  这个目录下放的都是服务,开机启动的不启动的都放在这里,只要把我刚才写的脚本放在这里之后。。。。还是不能用service调用   0*0

刚说完一个目录现在来说说一个命令chkconfig

chkconfig可以跟上的几个后缀比如 --list 若在后面跟上服务名可以查看某个服务,不跟查看所有服务。比如下面这样:

[root@centos9 init.d]# chkconfig --list
abrt-ccpp      	0:off	1:off	2:off	3:on	4:off	5:on	6:off
abrtd          	0:off	1:off	2:off	3:on	4:off	5:on	6:off
acpid          	0:off	1:off	2:on	3:on	4:on	5:on	6:off
atd            	0:off	1:off	2:off	3:on	4:on	5:on	6:off
auditd         	0:off	1:off	2:on	3:on	4:on	5:on	6:off
autofs         	0:off	1:off	2:off	3:on	4:on	5:on	6:off
.......
上面只显示了一部分下面省略
[root@centos9 init.d]# chkconfig --list nfs
nfs            	0:off	1:off	2:off	3:off	4:off	5:off	6:off
[root@centos9 init.d]#

上面就是显示单个服务和所有服务,0-6显示off和on是开机启动级别,比如5;on 就是在开机启动级别为5时启动该服务,相反off则不启动(开机启动级别就不在这里涉及了)

第二:--add 跟上脚本/服务名 即添加为真正的服务

[root@centos9 init.d]# chkconfig --add mydeamon 
[root@centos9 init.d]#

没报错说明执行成功  0.0

第三:--del 没错add是添加del就是删除

好先跳过这里回到add的。。。。。。。

用add添加的时候要有前提的,bash脚本的开头要有#!/bin/bash,这虽然不是必须的但是是个好习惯,但是添加服务必须要两条注释虽然最重要的只有一条,嘿嘿嘿!就是下面这样子

#!/bin/bash
# -----------------------
# chkconfig: 345 98 03
# description: msr
# -----------------------

chkconfig这行添加的内容第一串数字表示在哪些启动级别开机启动我的也就是在init3/4/5的时候开机启动该服务。

98...说到这个98(数字并不唯一)在/etc/下有一些rc*.d/的目录*可以为0-6。比如/etc/rc5.d/这个目录下都是一些S或K开头的文件,当用户用chkconfig在/etc/init.d/下添加服务时,系统根据注释信息的三个字符串来在这些目录下创建文件。就用我的脚本来说明,345、98、03即在rc3.d rc4.d rc5.d 创建S98开头的软连接,其他目录则创建K03开头的软连接。S后面数字越小系统启动时优先级越高,K后数字越小表明关闭服务时越先关闭,这里也直接说明了我写的脚本注释里03的意思。(里面也说到了S启动软连接,K关闭软连接)

只要用add添加服务,/etc/rc*.d/自动创建软链接,而刚才说到的--del加上服务则是删除软连接。并不删除/etc/init.d/下的服务文件或者脚本。想要删除文件,还需自己手动来删除文件了。

好了到这里就可以自己添加一个开机启动和停止脚本了。添加脚本时自己先行测试一下还是必要的,免得开机启动的时候启动到自己添加的脚本时出问题启动不起来那尴尬了。。。