Linux系统服务分类

简介

系统服务是在后台运行的应用程序,并且可以提供一些本地系统或网络的功能。我们把这些应用程序称作服务,也就是 Service。或者 DaemonDaemon 的英文原意是”守护神”,在这里是”守护进程”的意思。守护进程就是为了实现服务、功能的进程。例如:httpd 守护进程(Daemon)启动 apache 服务的进程,守护进程就是服务在后台运行的真实进程。

守护进程

Linux系统上提供服务的程序是由运行在后台的守护进程(Daemon)来执行。一个实际运行中的Linux系统一般会有多个这样的程序在运行。这些后台守护进程在系统开机后就运行了,并且在时刻地监听前台客户地服务请求,一旦客户发出了服务请求,守护进程便为它们提供服务。Windows系统中的守护进程被称为 服务

按照服务类型,守护进程可以分为如下两类:

  • 系统守护进程:如 crond(周期任务)rsyslogd(日志服务)cpus等;
  • 网络守护进程:如 sshdhttpdxinetd(托管)等。

系统守护进程

系统初始化进程是一个特殊的的守护进程,其PID为1,它是所有其他守护进程的父进程或者祖先进程。也就是说,系统上所有的守护进程都是由系统初始化进程进行管理的(如启动、停止等)。

在Linux的发展历史过程中,使用过3种Linux初始化系统。

SysVinit

为 UNIX System V 系统创建的;
RHEL/CentOS 5及之前的版本一直使用。

Upstart

由Ubuntu创建的;
RHEL/CentOS 6 使用Upstart。

Systemd

先进的初始化系统;
RHEL/CentOS 7使用Systemd。

独立启动的守护进程:stand-alone,每个特定服务都有单独的守护进程,这个处理单一服务的始终存在的进程就是独立启动的守护进程。
超级守护进程:多个服务统一由一个进程管理,该进程可以管理多个服务。
Xinetd:即 extended internet daemon,是新一代的网络守护进程服务程序,又叫超级Internet服务器,常用来管理多种轻量级Internet服务。Xinetd提供类似于 inetd+tcp_wrapper 的功能,但是更加强大和安全。

服务分类

Linux 中的服务按照安装方法不同可以分为 RPM 包默认安装的服务源码包安装 的服务两大类。其中,RPM 包默认安装的服务又因为启动与自启动管理方法不同,分为 独立的服务基于 xinetd 的服务 。服务分类的关系图,如图所示

2-1Q02413195AP.jpg

Linux 中常见的软件包有两种:

  • 一种是 RPM 包;
  • 另一种是源码包。

通过 RPM 包安装 的系统服务就是 RPM 包默认安装的服务(因为 Linux 光盘中全是 RPM 包,Linux 系统也是通过 RPM 包安装的,所以我们把 RPM 包又叫作 系统默认包 ),
通过 源码包安装 的系统服务就是源码包安装的服务。

特点

  • 源码包是开源的,自定义性强,通过编译安装更加适合系统,但是安装速度较慢,编译时容易报错。
  • RPM 包是经过编译的软件包,安装更快速,不易报错,但不再是开源的。

区别

最主要的区别就是安装位置不同,源码包安装到我们手工指定的位置当中,而 RPM 包安装到系统默认位置当中(可以通过 rpm -ql 包名 命令查询)。

也就是说,RPM 包安装到系统默认位置,可以被服务管理命令识别;但是源码包安装到手工指定位置,当然就不能被服务管理命令识别了(可以手工修改为被服务管理命令识别)。

所以,RPM 包默认安装的服务和源码包安装的服务的管理方法不同,我们把它们当成不同的服务分类。服务分类说明如下。

RPM 包默认安装的服务。这些服务是通过 RPM 包安装的,可以被服务管理命令识别。

这些服务又可以分为两种:

  • 独立的服务:就是独立启动的意思,这种服务可以自行启动,而不用依赖其他的管理服务。因为不依赖其他的管理服务,所以,当客户端请求访问时,独立的服务响应请求更快速。目前,Linux 中的大多数服务都是独立的服务,如 apache服务FTP服务Samba服务 等。

  • 基于 xinetd 的服务:这种服务就不能独立启动了,而要依靠管理服务来调用。这个负责管理的服务就是 xinetd 服务。xinetd 服务是系统的超级守护进程,其作用就是管理不能独立启动的服务。当有客户端请求时,先请求 xinetd 服务,由 xinetd 服务去唤醒相对应的服务。当客户端请求结束后,被唤醒的服务会关闭并释放资源。这样做的好处是只需要持续启动 xinetd 服务,而其他基于 xinetd 的服务只有在需要时才被启动,不会占用过多的服务器资源。但是这种服务由于在有客户端请求时才会被唤醒,所以响应时间相对较长。

源码包安装的服务: 这些服务是通过源码包安装的,所以安装位置都是手工指定的。由于不能被系统中的服务管理命令直接识别,所以这些服务的启动与自启动方法一般都是源码包设计好的。每个源码包的启动脚本都不一样,一般需要查看说明文档才能确定。

查询服务

区分已安装的服务

  • 源码包安装的服务是不能被服务管理命令直接找到的,而且一般会安装到 /usr/local/ 目录中。
  • RPM 包默认安装的服务都会安装到系统默认位置,所以是可以被服务管理命令(如 servicechkconfig)识别的。

区分RPM 包默认安装的独立的服务和基于 xinetd 的服务

chkconfig 是管理 RPM 包默认安装的服务的自启动的命令,这里仅利用这条命令的查看功能。使用这条命令还能看到 RPM 包默认安装的所有服务。命令格式如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
# 列出系统中RPM包默认安装的所有服务的自启动状态
chkconfig --list [服务名]
# 独立的服务
abrt-ccpp 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
abrt-oops 0:关闭 1:关闭 2:关闭 3:启用 4:关闭 5:启用 6:关闭
udev-post 0:关闭 1:启用 2:启用 3:启用 4:启用 5:启用 6:关闭
xinetd 0:关闭 1:关闭 2:关闭 3:启用 4:启用 5:启用 6:关闭
ypbind 0:关闭 1:关闭 2:关闭 3:关闭 4:关闭 5:关闭 6:关闭
# 基于 xinetd 的服务:
chargen-dgram:关闭
chargen-stream:关闭
cvs:关闭
daytime-dgram:关闭

选项:

  • –list:列出 RPM 包默认安装的所有服务的自启动状态;

在刚刚的独立的服务之下出现了一些基于 xinetd 的服务,这些服务没有自己的运行级别,因为它们不是独立的服务,到底在哪个运行级别可以自启动,则要看 xinetd 服务是在哪个运行级别自启动的。

注:在 Linux 中基于 xinetd 的服务越来越少,原先很多基于 xinetd 的服务在新版本的 Linux 中已经变成了独立的服务。

参考:

Linux系统服务及其分类