centOS 6 服务管理与服务脚本

服务管理与服务脚本

linux服务

  • 服务管理与服务脚本

    • linux服务
    • 服务启动过程详解
    • chkconfig命令
    • 非独立服务与xinetd进程
    • 一个特殊的服务脚本

服务启动过程详解

在开机启动过程中,我们计算机的各种服务也会按照配置信息启动服务,那个我们的服务使如何启动的呢?我们以 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"="1"];then

continue

elif["$rc"="2"];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为例,作以说明:

[[email protected] ~]#/etc/rc.d/init.d/autofs start

Starting automount: automount: program is already running.

[ OK ]

上述的效果其实和service autofs本质上是一样的:

[[email protected] ~]#service autofs start

Starting automount: automount: program is already running.

[ OK ]

接下来,我们以一个简单的服务脚本为例,做一个简单的说明演示:

脚本:

#!/bin/bash

source /etc/rc.d/init.d/functions

if[ $1 !="stop"]&&[ $1 !="start"]&&[ $1 !="restart"]&&[ $1 !="status"];then

echo "The parameter must be start,stop,restart,status"

exit;

fi

if[ $1 ="start"];then

if[-e /var/lock/subsys/$(basename $0)];then

action "the `basename $0` has started!" false

else

touch /var/lock/subsys/$0

action "the ` basename $0` start success" true

fi

elif[ $1 ="stop"];then

if[-e /var/lock/subsys/$(basename $0)];then

rm -rf /var/lock/subsys/$(basename $0)

action "the `basename $0` has stopped!" true

else

action "the`basename $0` is not starting" false

fi

elif[ $1 ="restart"];then

if[-e /var/lock/subsys/$(basename $0)];then

rm -rf /var/lock/subsys/$(basename $0)

action "the `basename $0` has stopped!" true

touch /var/lock/subsys/$0

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[ $1 ="status"];then

if[-e /var/lock/subsys/$(basename $0)];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 onchkconfig NetworkManager off,这种方式默认启用或关闭2345模式下的服务。

接下来我们使用chkconfig NetworkManager on开启服务,既然我们将服务就开启了,那么在/etc/rc3.d/下面肯定有一个以S开头的相关服务这就意味着它开机就能启动。

接下来,我们做一个小实验:

  1.  查看atd服务是否开启,若开启,关闭
  2.  删除掉/etc/rc3.d/下atd的软链接
  3.  创建一个数值靠后,并且是S开头的软链接
  4.  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:

[[email protected] init.d]#chkconfig --list testsrv.sh

testsrv.sh 0:off 1:off 2:off 3:on 4:off 5:on 6:off

[[email protected] init.d]#chkconfig --level 3 testsrv.sh off

[[email protected] 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在指定运行级别脚本后运行
  • 可以根据情况,进行自定义修改

#wmd-preview { font-family: Consolas, 微软雅黑 !important }
#wmd-preview h1 { color: #0077bb }

时间: 2024-08-01 10:41:19

centOS 6 服务管理与服务脚本的相关文章

详解CentOS配置和管理web服务-Apache

详解CentOS配置和管理web服务-Apache 家住海边喜欢浪:zhang789.blog.51cto.com 目录 1.web介绍 2.web历史和工作原理 3.http请求流程 4.关于Apache 5.Apache服务器软件安装使用 6.符号链接和虚拟目录 7.页面重定向 8.Apache日志文件 9.Apache安全配置 10.虚拟主机 10.1.基于IP 10.2.基于域名 10.3.基于端口 web服务器配置和管理 http协议简介 http协议,全称HyperText Tran

Linux服务管理-RPM服务的管理-基于xinetd服务管理

xinetd是超级守护进程 基于这个服务的越来越少 进行自启动  和启动一致的!

Linux服务管理-RPM服务的管理-独立服务管理

rpm安装包路径详解:

centOS7服务管理与启动流程

centOS7服务管理与启动流程 centOS7启动流程 systemd简介 unit对象 unit类型 特性 service unit文件格式 service unit file文件通常由三部分组成 unit段的常用选项 Service段的常用选项 Install段的常用选项 管理服务 管理系统服务 服务查看 chkconfig命令的对应关系 其他命令 服务状态 systemctl示例 运行级别 运行级别与target的对照 运行级别的切换 CentOS7引导顺序 设置简单的内核参数 简单的启

Linux系统服务管理 服务管理

Linux独立服务管理 启动服务 systemctl start 服务名称.service 设置开机自启动 systemctl enable 服务名称.service 停止开机自启动 systemctl disable 服务名称.service 查看服务当前状态 systemctl status 服务名称.service 重新启动服务 systemctl restart 服务名称.service 查看所有已启动的服务 systemctl list-units --type=service Lin

Linux学习笔记——Linux服务管理(十)

+++++++++++++++++++++++++ +++++Linux服务管理+++++++++++++++++++++++++++++++ 1. 服务简介与分类 服务启动与自启动的概念: 服务启动:就是在当前系统中让服务运行,并提供功能 服务自启动:自启动是指让服务在系统开机或重启之后,随着系统的启动而自动启动的服务 查询已安装的服务: RPM包安装的服务——命令 :chkconfig --list     #查看服务自启动状态,可以看到所有RPM包安装的服务 源码包安装的服务——查看服务安

如何通过Azure Service Management REST API管理Azure服务

通过本文你将了解: 什么是Azure Service Management REST API 如何获取微软Azure 订阅号 如何获取Azure管理证书 如何调用Azure Service Management REST API 什么是Azure Service Management REST API Azure Service Management REST API(之后简称为Azure REST API)是微软开放的一组REST API,它使得Azure用户不仅可以从Azure门户网站上对运

PostgreSQL 安装与服务管理

Windows 安装过程 从这里下载二进制安装包,一步一步按照提示即可. 服务管理 服务的名字可以先使用services.msc查看 λ net start postgresql-x64-10 postgresql-x64-10 - PostgreSQL Server 10 服务正在启动 . postgresql-x64-10 - PostgreSQL Server 10 服务已经启动成功. λ net stop postgresql-x64-10 postgresql-x64-10 - Pos

(二)Linux实操之——网络配置、进程管理、服务管理、组管理

接上段   (一)Linux实操之——权限.任务调度.磁盘分区 4.网络配置 4.1 NAT模式的网络配置 目前我们采用的网络配置是NAT模式. windows下cmd通过 ipconfig 命令可以得到本机的网络配置. linux下通过 ifconfig 可得到虚拟机的网络配置 在windows系统中运行着虚拟机中的linux系统,那么两个系统是怎么通信的呢? 实际上windows系统与本机的linux的通信是通过 VMnet8的虚拟网卡来进行的,两者形成网络,192.168.177.128