1、什么是daemon与服务(service)
常驻在内存中的进程,且可以提供一些系统或网络功能,那就是服务(service)。
实现这个service的程序我们就称它为daemon。举例来说,实现循环型例行性工作调度服务(service)的程序为crond这个daemon。事实上,你可以将这两者视为相同!因为达成某个服务是需要一个daemon在后台运行的。
在CentOS 7.x 中,传统的 init 已被舍弃,取而代之的是 systemd 这个服务。
全部的 systemd 都用 systemctl 這個管理程式管理,而 systemctl 支援的語法有限制,不像 /etc/init.d/daemon 就是純腳本可以自訂參數,systemctl 不可自訂參數。
1.1、daemon的分类
如果依据daemon的启动与管理方式来区分,基本上可以将daemon分为可独立启动的 “stand alone” 和 通过一个“super daemon”来统一管理的服务这两大类。
stand_alone:此daemon可以自行单独启动服务
stand_alone“独立启动”,此类型的daemon可以自行启动而不必通过其他机制的管理;daemon启动并加载到内存后就一直占用内存与系统资源。因为一直存在于内存中持续提供服务,因此响应速度较快;
super daemon:一个特殊的daemon来统一管理
这一种启动方式则是通过一个统一的daemon来负责唤起系统,这个特殊的daemon被称为super daemon。当没有客户端请求时,各项服务都是未启动情况,等到有来自客户端的请求时,super daemon才唤醒相对应的服务。当客户端请求结束后,被唤醒的这个服务也会关闭并释放系统资源。
这种机制的好处是:
由于super daemon负责唤醒各项服务,因此super daemon可以具有安全控管的机制,就是类似网络防火墙的功能;
由于服务在客户端的连接结束后就关闭,因此不会一直占用系统资源。
但缺点就是服务的响应时间有点慢。
multi-threaded(多线程)
single-threaded(单线程)
daemon的命名规则:
这些服务被挂上Linux使用时,通常在服务的名称后面加上一个d,例如atd,crond,httpd,mongod等。
1.2、服务与端口的对应
我们通过IP定位主机,通过端口号定位服务请求。
让服务和端口号对应在一起,/etc/services文件。不建议修改这里面的文件,除非你自定义的服务和地下网站。
1.3、system的文件存放目录
systemd将过去多维的daemon执行脚本通通称为一个服务单位(unit),而每种服务单位依据功能来区分时,就分为不同的类型(type)。基本包括系统服务、资料监听与交换、socket、存储系统状态类型、不同运行等级的操作环境等。
设置文档都放置于以下目录:
/usr/lib/systemd/system/:每个系统服务最主要的启动脚本设定,有点类似以前的/etc/init.d;
/run/systemd/system/:系统执行过程中所产生的服务脚本,脚本的优先序要比/usr/lib/systemd/system高;
/etc/systemd/system/:管理员依据主机的需求建立的执行脚本,优先序比/usr/systemd/system高;
/etc/sysconfig/*:几乎所有的服务都会将初始化的一些选项写入这个目录下。如网络的设定/erc/sysconfig/network-scripts/;
/var/lib:一些会产生资料的服务都会将它的资料写入/var/lib目录中;如数据库预设就是写入/var/lib/mysql;
/run/:放置好多daemon的暂存档,包括lock file 以及 PID file。
1.4、常见的systemd的服务类型
2、system管理服务
基本上,systemd这个启动服务的机制,主要是通过systemctl的指令来处理的。跟以前system V需要service、chkconfig、setup、init等指令来协助不同,systemd就是仅有systemctl这个指令来处理。
2.1、systemctl
一般来说,服务的启动有两个阶段,一个是开机的时候要不要启动;一个是现在要不要启动。
几个常见的状态:
active(running):正有一个或多个程序在系统中执行;
active(exited):近执行一次就正常结束的服务;
active(waiting):正在执行当中,不过还再等待其他的时间才能继续处理;
inactive:这个服务目前没有运作。
enabled:这个daemon将在开机时被执行;
disable:这个daemon在开机时不会被执行;
static:这个daemon不可以自己启动;
mask:这个daemon无论如何都无法被启动。
强迫服务注销(mask)的练习:
2.2、通过systemctl管理系统上所有的服务
2.3、通过systemctl管理不同的操作环境(target unit)
主要target有以下几个:
graphical.target:就是文字加上图形界面,这个已经包含了multi-user.target;
multi-user.target:纯文本模式;
rescue.target:在无法使用root登入的情况下,ststemd再开机时会多加一个额外的暂时系统,与你原本的系统无关,这是你可以取得root的权限来维护你的系统;
emergency.target:紧急处理系统的错误,在无法使用rescue时可以尝试使用;
shutdown.target:就是关机的流程;
getty.targt:可以设定你需要几个tty之类。
suspend:暂停模式是将系统的状态保存到记忆中;
hibernate:休眠模式是将系统状态保存到硬盘中。