服务管理与服务脚本
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 命令可以 ...
随机推荐
-
ux.form.field.KindEditor 所见所得编辑器
注意需要引入KindEditor相关资源 //所见所得编辑器 Ext.define('ux.form.field.KindEditor', { extend: 'Ext.form.field.Text ...
-
div滑入与滑出
html <div class="pop_tit"> <span class="p_tit1" title="大连未来城LECITY ...
-
Uyuw&#39;s Concert POJ2451
裸半平面交,以前没写过,先写一遍再说 我越来越不注意细节了,最后才发现空间稍微开小了(没有开那个零头,他又要多4条边,就WA了) const maxn=; eps=1e-7; type point=r ...
-
gdal中文路径无法打开问题
在C#中使用OGR读写矢量数据时,需要引用“using OSGeo.OGR;”. 同时为了处理中文路径和中文字段,需要在开始设置下面两个属性,代码如下: //为了支持中文路径,请添加下面这句代码(大多 ...
-
Python Tutorial 学习(二)--Using the Python Interpreter
Using the Python Interpreter 2.1. Invoking the Interpreter The Python interpreter is usually install ...
-
【转】Math.Atan2 方法
原文网址:https://msdn.microsoft.com/zh-cn/library/system.math.atan2.aspx 返回正切值为两个指定数字的商的角度. 命名空间: Syste ...
-
java web系统优化, mysql查询优化
1. 采用数据库连接池技术 2. 优化sql语句格式, 比如用PreparedStatement代替Statement, 前者避免重复编译, 后者每次都需要对数据库进行解析编译, 降低数据库的访问效率 ...
-
win10大水牛主机插入耳机没有声音
主机:大水牛,技嘉主板 操作系统:win10 问题:主机前面插入耳机,没有声音,扬声器图标出错 解决 一..插入耳机 二..Realtek高清晰音频管理器 1.打开音频管理器,点击右下角的设置 2.点 ...
-
BZOJ 1483: [HNOI2009]梦幻布丁 [链表启发式合并]
1483: [HNOI2009]梦幻布丁 题意:一个带颜色序列,一种颜色合并到另一种,询问有多少颜色段 一种颜色开一个链表,每次遍历小的合并到大的里,顺带维护答案 等等,合并方向有规定? 令col[x ...
-
lojround3
A.绯色 IOI(开端) 首先注意到是完全图,数据范围又很大,肯定要观察一些性质 我们化简一下式子 发现其实是要求simga(xixj)最大 那么结论就很好想了 最大的和次大的第三大的连一起...然后 ...