系统服务 (daemons)
一、守护进程daemon与服务service
- 举例来说,linux系统需要实现循环执行定时任务的功能就需要 crond 程序的执行
- 这里讲的循环执行定时任务就是系统提供的服务service,但是实现这个功能的是 crond 这个程序,也就是daemon
- 一般情况没有必要非要去区分二者的差别,就将二者视为一样的也可以
1、daemon 的类型
stand alone:此 daemon 可以自行单独启动服务
- stand alone 的 daemon 响应速度较快。
- 常见的 stand alone daemon 有 WWW 的 daemon (httpd)、FTP 的 daemon (vsftpd) 等等
- 系统服务都是独立运行的守护进程,包括syslogd和crond等
super daemon:一支特殊的 daemon 来统一管理
-
这种服务的启动方式则是藉由一个统一的 daemon 来负责唤起服务,这个特殊的 daemon 就被称为 super daemon
-
当没有客户端的请求时,各项服务都是未启动的情况,等到有来自客户端的要求时, super daemon 才唤醒相对应的服务,当客户端的请求结束后,被唤醒的这个服务也会关闭并释放系统资源,这种模式的运行示意图如下
-
这种模式的优缺点:
- super daemon 可以具有安全控管的机制,就是类似网络防火墙的功能啦
- 比较节约系统的资源,但是同时对客户端提供响应的速度相对慢一些
-
super daemon 的处理模式有两种,分别是这样:
- multi-threaded (多重线程):
全部客户的请求都给他拿来,一次给他交办下去,所以一个服务同时会负责好几个程序 - single-threaded (单个线程):
一个一个来,第一个没有处理完之前,后面的请排队,请求多的话要等很久
- multi-threaded (多重线程):
-
以 daemon 提供服务的的工作状态来区分,又可以将 daemon 分为两大类
- signal-control
通过讯号来管理的,只要有任何客户端的需求进来,他就会立即启动去处理。 - interval-control
就是每隔一段时间就主动的去运行某项工作,前面学到的 atd 与 crond 就属于这种类型的 daemon 啦
- signal-control
守护进程(daemon)命名守则:就是在与原有的单词后面加上一个 d
2、服务与端口的对应
- 在互联网的世界里,通过IP可以找到我们的主机,通过具体的port端口可以定位到具体的服务(程序)
- Linux 里面配置对应关系的服务和端口号就是
/etc/services
啦,不过这个东西最好不要随便改,因为都是遵循互联网的协议的
3、daemon 的启动脚本与启动方式
daemon相关文件
/etc/init.d/*
:启动脚本放置处
系统上几乎所有的服务启动脚本都放置在这里,这是公认的目录,实际上放置在 /etc/rc.d/init.d/ 啦,此目录是一个链接文件;centos7中这个目录里面基本没啥东西了,init已经被systemd取代了/etc/sysconfig/*
:各服务的初始化环境配置文件
几乎所有的服务都会将初始化的一些选项配置写入到这个目录下,举例来说,而网络的配置则写在 /etc/sysconfig/network-script 这个文件夹中/etc/xinetd.conf, /etc/xinetd.d/*
:super daemon 配置文件/var/lib/*
:各服务产生的数据库/var/run/*
:各服务的程序之 PID 记录处
daemon 通常会将自己的 PID 记录一份到 /var/run/ 当中!例如登录文件的 PID 就记录在 /var/run/syslogd.pid 这个文件中
Stand alone 的启动方式
- 独立运行的守护进程由init脚本负责管理,所有独立运行的守护进程的脚本在/etc/init.d/目录下
- 老版本的 centos 命令 service 本质也是到
/etc/init.d/*
目录下寻找相关的启动脚本来启动服务 - centos7中 init.d 文件夹里面基本没啥启动的脚本了,服务的管理都是通过 systemctl 来管理了
Super daemon 的启动方式
- centos中的super daemon一般是由 xinetd 来实现的,他可以同时监听多个指定的端口
- Xinetd的配置文件 /etc/xinetd.conf ,个别 daemon 配置文件则在 /etc/xinetd.d/* 内,也就是说前者是一个全局的配置,后者是针对个别 daemon 的配置
参考文章:
systemctl使用指南:CentOS 7.x systemd对比CentOS 6.x daemon
Linux中的两种守护进程stand alone和xinetd
最简明扼要的 Systemd 教程,只需十分钟