简介
系统服务是在后台运行的应用程序,并且可以提供一些本地系统或网络的功能。我们把这些应用程序称作服务,也就是 Service
。或者 Daemon
,Daemon
的英文原意是”守护神”,在这里是”守护进程”的意思。守护进程就是为了实现服务、功能的进程。例如:httpd 守护进程(Daemon)启动 apache 服务的进程,守护进程就是服务在后台运行的真实进程。
守护进程
Linux系统上提供服务的程序是由运行在后台的守护进程(Daemon)来执行。一个实际运行中的Linux系统一般会有多个这样的程序在运行。这些后台守护进程在系统开机后就运行了,并且在时刻地监听前台客户地服务请求,一旦客户发出了服务请求,守护进程便为它们提供服务。Windows系统中的守护进程被称为 服务
。
按照服务类型,守护进程可以分为如下两类:
- 系统守护进程:如
crond(周期任务)
、rsyslogd(日志服务)
、cpus
等; - 网络守护进程:如
sshd
、httpd
、xinetd(托管)
等。
系统守护进程
系统初始化进程是一个特殊的的守护进程,其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 的服务
。服务分类的关系图,如图所示
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 包默认安装的服务都会安装到系统默认位置,所以是可以被服务管理命令(如
service
、chkconfig
)识别的。
区分RPM 包默认安装的独立的服务和基于 xinetd 的服务
chkconfig
是管理 RPM 包默认安装的服务的自启动的命令,这里仅利用这条命令的查看功能。使用这条命令还能看到 RPM 包默认安装的所有服务。命令格式如下:
1 | # 列出系统中RPM包默认安装的所有服务的自启动状态 |
选项:
- –list:列出 RPM 包默认安装的所有服务的自启动状态;
在刚刚的独立的服务之下出现了一些基于 xinetd 的服务,这些服务没有自己的运行级别,因为它们不是独立的服务,到底在哪个运行级别可以自启动,则要看 xinetd 服务是在哪个运行级别自启动的。
注:在 Linux 中基于 xinetd
的服务越来越少,原先很多基于 xinetd
的服务在新版本的 Linux 中已经变成了独立的服务。
参考: