centOS 6 服务管理与服务脚本
服务管理与服务脚本
linux服务
服务启动过程详解
在开机启动过程中,我们计算机的各种服务也会按照配置信息启动服务,那个我们的服务使如何启动的呢?我们以 init 3模式为例,进行说明: 
上图中:rc 3 --> 意味着读取/etc/rc.d/rc3.d/下的内容,现在我们看看/etc/rc.d/rc3.d/下有什么东西。

在/etc/rc.d/rc3.d/目录下,我们看到全部都是软链接连接到/init.d/下的脚本。
我们可以通过脚本加状态的模式启用或关闭我们的某个服务:
K*: K##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为依赖到别的服务
S*: S##*:##运行次序;数字越小,越先运行;数字越小的服务,通常为被依赖到的服务
但是实际上它并不是按照数字排序的,而是按照字符串的大小排序的。
K开头的服务代表开机不启动
S开头的服务代表开机启动
所以我们在写服务脚本的时候,如果是依赖于某些服务的,我们最好能够将我们的脚本连接名排到我们的服务所依赖的服务软连接后面。
我们看一下,在启动计算机的过程中,init加载了一个脚本/etc/rc.d/rc,下面是这个脚本的一部分内容。
# First, run the KILL scripts.
for i in/etc/rc$runlevel.d/K*;do
# Check if the subsystem is already up.
subsys=${i#/etc/rc$runlevel.d/K??}
[-f /var/lock/subsys/$subsys -o -f /var/lock/subsys/$subsys.init ]||continue
check_runlevel "$i"||continue
# Bring the subsystem down.
[-n "$UPSTART"]&& initctl emit --quiet stopping JOB=$subsys
$i stop
[-n "$UPSTART"]&& initctl emit --quiet stopped JOB=$subsys
done
# Now run the START scripts.
for i in/etc/rc$runlevel.d/S*;do
# Check if the subsystem is already up.
subsys=${i#/etc/rc$runlevel.d/S??}
[-f /var/lock/subsys/$subsys ]&&continue
[-f /var/lock/subsys/$subsys.init ]&&continue
check_runlevel "$i"||continue
# If we're in confirmation mode, get user confirmation
if["$do_confirm"="yes"];then
confirm $subsys
rc=$?
if["$rc"=""];then
continue
elif["$rc"=""];then
do_confirm="no"
fi
fi
update_boot_stage "$subsys"
# Bring the subsystem up.
[-n "$UPSTART"]&& initctl emit --quiet starting JOB=$subsys
if["$subsys"="halt"-o "$subsys"="reboot"];then
export LC_ALL=C
exec $i start
fi
$i start
[-n "$UPSTART"]&& initctl emit --quiet started JOB=$subsys
done
在上面的脚本中我们发现,计算机在启动服务过程中,会在对应的运行级别下,先关闭一部分服务,关闭玩服务之后才会再对应的运行级别下启动一些服务。
所以面图片中带有K开头的软链接程序,就相当于执行真正指向的脚本后面跟上stop,带有S开头的软链接程序,就相当于执行真正指向的脚本后面跟上start。
我们以autofs为例,作以说明:
[root@CT691 ~]#/etc/rc.d/init.d/autofs start Starting automount: automount: program is already running. [ OK ]
上述的效果其实和service autofs本质上是一样的:
[root@CT691 ~]#service autofs start Starting automount: automount: program is already running. [ OK ]
接下来,我们以一个简单的服务脚本为例,做一个简单的说明演示:
脚本:
#!/bin/bash source /etc/rc.d/init.d/functions if[ $ !="stop"]&&[ $ !="start"]&&[ $ !="restart"]&&[ $ !="status"];then echo "The parameter must be start,stop,restart,status" exit; fi if[ $ ="start"];then if[-e /var/lock/subsys/$(basename $)];then action "the `basename $0` has started!" false else touch /var/lock/subsys/$ action "the ` basename $0` start success" true fi elif[ $ ="stop"];then if[-e /var/lock/subsys/$(basename $)];then rm -rf /var/lock/subsys/$(basename $) action "the `basename $0` has stopped!" true else action "the`basename $0` is not starting" false fi elif[ $ ="restart"];then if[-e /var/lock/subsys/$(basename $)];then rm -rf /var/lock/subsys/$(basename $) action "the `basename $0` has stopped!" true touch /var/lock/subsys/$ action "the ` basename $0` restart success" true else action "the`basename $0` is not starting" false action "the`basename $0` is not starting" false fi elif[ $ ="status"];then if[-e /var/lock/subsys/$(basename $)];then echo -e "the \033[1;32;1m`basename $0`\033[0m is running" else echo -e "the \033[1;31;1m`basename $0`\033[0m has stopped!" fi fi
接下来,我们将这个脚本放到/etc/rc.d/init.d/中去,先试一下看是否有什么问题: 
我们使用service试试:一样可以使用 
现在这个脚本并不是开机就能运行的,我们将它做成服务,还需要进行一些改变。在linux上,有一个工具控制着计算机服务的开机是否运行:ntsysv命令
如下图所示,带星好的就是开机运行的服务,不带星号的就是开机不运行的服务 
chkconfig命令
这个工具有一个不好的地方就是它只能改本模式下的服务的开机是否启动,不能改变其他模式下服务的开机启动,如果我想改5模式的,需要使用ntsysv --level=5,如果我们想改各个模式下的开机服务,如果使用这个方法一个一个该改,十分的不方便,所以,我们使用chkconfig命令: 
我们可以使用这个命令看到各个模式下的服务是否开启或关闭,我以上图的第一个服务为例,关闭在3,5模式下的开机服务,看看如何实现: 
关闭成功。
更多的时候,我们会使用chkconfig NetworkManager on 或chkconfig NetworkManager off,这种方式默认启用或关闭2345模式下的服务。
接下来我们使用chkconfig NetworkManager on开启服务,既然我们将服务就开启了,那么在/etc/rc3.d/下面肯定有一个以S开头的相关服务这就意味着它开机就能启动。 
接下来,我们做一个小实验:
- 查看atd服务是否开启,若开启,关闭
- 删除掉/etc/rc3.d/下atd的软链接
- 创建一个数值靠后,并且是S开头的软链接
- chkconfig查看atd服务状态



我们看到,当我们创建一个S开头的软链接之后,它的开机服务状态就变成了on了。
接下来我们将刚才的testsrv.sh做成我们的服务脚本,要做服务脚本,还需要一点点的改动,我们需要在注释中加上一行#chkconfig: 35 96 03 35代表的含义是在3和5模式下开机启动,96代表S开头的编号,03代表K开头的编号。 
现在还是没有服务启动的的,我们需要手动加上去: 
现在,在3模式下他已经是可以开机启动的服务了,我们也可以现在手动改成在3模式下开机不启动的状态,我们只需要chkconfig --level 3 testsrv.sh off:
[root@CT691 init.d]#chkconfig --list testsrv.sh testsrv.sh :off :off :off :on :off :on :off [root@CT691 init.d]#chkconfig --level testsrv.sh off [root@CT691 init.d]#ls /etc/rc3.d/K03* /etc/rc3.d/K03testsrv.sh
如果我们不想要这个服务,我们需要将这个服务给删除,删除的方法是:chkconfig --del testsrv.sh,删除服务后,文件并不会被删除,但是软链接会被删除。chkconfig --list也不能查询到。
非独立服务与xinetd进程
很多时候,一些服务我们平时用不到,有时候一年才用一次或者好几个月用一次,如果让该服务开机就跑起来就太过于浪费资源。我们需要再使用它的时候自动开启,这该如何实现呢?
我们上面的一个一个的服务就做独立服务,而非独立服务是有特定的服务进行代理监听端口,等等有访问时由特定服务通知该服务启动运行,这个特定的服务就是xinetd,我们也可以称它是超级守护进程。
Telnet服务就是一个非独立服务,它的使用需要依赖于xinetd,当我们使用yum安装该软件时,它会自动安装上xinetd,下面是我安装好的Telnet:

接下来我们启动该服务,在第一次安装后,首先启动xinetd,在启动telnet: 

我们在启动服务后可以看看是谁在监听这着23端口:

接下来我们尝试使用Telnet连接该系统,然后再次查看是谁在监听端口:
当我们开始使用的时候,他就变成了由原服务来执行,这就是我们要说的非独立服务。
一个特殊的服务脚本
正常级别下,最后启动一个服务S99local没有链接至/etc/rc.d/init.d一个服务脚本,而是指向了/etc/rc.d/rc.local脚本
不便或不需写为服务脚本放置于/etc/rc.d/init.d/目录,且又想开机时自动运行的命令,可直接放置于/etc/rc.d/rc.local文件中
- /etc/rc.d/rc.local在指定运行级别脚本后运行
- 可以根据情况,进行自定义修改
centOS 6 服务管理与服务脚本的更多相关文章
- RHEL 6 和 RHEL 7 的一些有关运行级别,服务管理,服务启动等方面的区别介绍
systemd是7中的新命令组,集成了service和chkconfig的功能.system命令可参考:https://www.cnblogs.com/ray-bk/p/10415173.html 运 ...
- centOS7服务管理与启动流程
centOS7服务管理与启动流程 centOS7启动流程 systemd简介 unit对象 unit类型 特性 service unit文件格式 service unit file文件通常由三部分组成 ...
- Linux系统服务管理 服务管理
Linux独立服务管理 启动服务 systemctl start 服务名称.service 设置开机自启动 systemctl enable 服务名称.service 停止开机自启动 systemct ...
- linux 学习 12 服务管理
第十二讲 Linux服务管理 12.1 Linux服务管理-服务分类 ——Linux服务 ----RPM包默认安装的服务 ————独立的服务 ————基于xinetd服务 ----源码包安装的服务 ...
- Linux基础学习(12)--Linux服务管理
第十二章——Linux服务管理 一.服务简介与分类 1.服务的分类: 注:独立的服务放在内存中(好处:响应的速率快,坏处:独立的服务越多,耗费的内存资源越多):xinetd服务本身是独立的,在内存中, ...
- linux的服务管理(centos6和Centos7)和网络管理(网卡配置),计划服务cron
服务和网络 管理 init ifcfg ens33 1.服务: Linux系统中提供的功能,统称为服务,如:at服务.cron服务.web服务.FTP服务.sshd服务等. 服务是由已经在运行的进程 ...
- 如何通过Azure Service Management REST API管理Azure服务
通过本文你将了解: 什么是Azure Service Management REST API 如何获取微软Azure 订阅号 如何获取Azure管理证书 如何调用Azure Service Manag ...
- 集群容器管理之swarm ---服务管理
服务管理 # 创建服务docker service create --replicas 1 --name hello busybox # docker service update --args &q ...
- (二)Linux实操之——网络配置、进程管理、服务管理、组管理、YUM
接上段 (一)Linux实操之——权限.任务调度.磁盘分区 4.网络配置 4.1 NAT模式的网络配置 目前我们采用的网络配置是NAT模式. windows下cmd通过 ipconfig 命令可以 ...
随机推荐
- centos7破解mariadb密码
第一步,停止运行mysql: systemctl stop mariadb.service 第二步,使用" -skip-grant-tables"参数重新启动mysql: mysq ...
- 一句话搞定-phpStudy安装yaf扩展
首先下载phpStudyX64位的,然后傻瓜式安装,安装完下载yaf,由于yaf扩展的网站在国外很难下载,需要FQ,所以我这里下载了yaf5.6nts.zip,解压后把php_yaf.dll这个文件粘 ...
- Windbg调试关键区(CriticalSection)死锁
一. 准备工作 这里一个有关键区锁死问题的程序,运行之后依次点击"CS锁死"按钮.右上角退出按钮,程序就会卡死.(图1) 对于眼下的这个问题,界面完全失去响应,这说明负责消息处理的 ...
- web本地存储
Web本地存储 通过本地存储(Local Storage),web 应用程序能够在用户浏览器中对数据进行本地的存储. 在 HTML5 之前,应用程序数据只能存储在 cookie 中,包括每个服务器请求 ...
- postman 第1节 安装启动(转)
安装: 1.mac app安装 浏览器访问https://www.getpostman.com/apps,选择Get the Mac App,下载安装即可 2.chrome app安装 浏览器访问ht ...
- 使用nginx实现纯前端跨越
你是否厌倦了老是依赖后台去处理跨域,把握不了主动权 你是否想模仿某个app倒腾一个demo,却困于接口无法跨域 那么很幸运,接下来我将现实不依赖任何后台,随心所欲的想访问哪个域名就访问哪个! 下载ng ...
- GeoServer初识与安装
学习过程中发现官网上的东西足够基础了,所以在这只做一下索引和补充. 官方网址:http://live.osgeo.org/zh/overview/geoserver_overview.html 安装: ...
- JSON取值(key是中文或者数字)方式详解
JSON取值(key是中文或者数字)方式详解 先准备一个json对象用于演示 var json = {'name':'zhangsan', '年龄':23, 404:'你可能迷路了'}; 使用JS中w ...
- java多线程设计模式
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt220 java多线程设计模式 java语言已经内置了多线程支持,所有实现Ru ...
- java性能真的差吗
详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt275 我见过java运行在手机上,包括很廉价的山寨手机,但是却暂时没发现.n ...