从Centos7.0以后,red hat系列的发行版都放弃了使用多年的System V开机启动服务(即init启动脚本的方法)。而使用Systemd这个启动服务管理机制。
好处:
并行处理所有服务,加速开机流程:旧的init启动脚本是“一项一项任务依序启动”的模式,因此不相依的服务也是得要一个一个的等待,而systemd可以让所有服务同时启动。
一经要求就回应的on-demand启动方式:systemd全部就是仅有一只systemd服务搭配systemctl指令来处理,无须其他额外的指令来支持。不像systemV还要init,chkconfig,service...等等指令。此外,systemd由于常驻内存,因此任何要求(on-demand)都可以立即处理后续的daemon启动的任务。
-
服务相依性的自我检查:因此如果B服务是架构在A服务上面启动的,那当你在没有启动A服务的情况下仅手动启动B服务时,systemd会自动帮你启动A服务。
配置文件放置目录:
-
/usr/lib/systemd/system/:每个服务最主要的启动脚本设置,有点类似/etc/init.d/的文件。对于支持systemd的程序,安装成功后会会自动在该目录下添加一些配置文件。如通过yum安装了docker之后,在该目录下就会多了一些相应配置文件
/run/systemd/system/: 系统执行过程中所产生的服务脚本,这些脚本的优先序要比上一个高。
-
/etc/systemd/system: 存放系统开机启动的服务,这是因为开机时systemd只执行/etc/systemd/system目录里面的配置文件。其实就是存放一些链接到/usr/lib/systemd/system/的链接文件而已。如使用systemctl enable docker 启动docker的开机自启动,其实就是在该目录下创建一个链接到/usr/lib/systemd/system/docker.service的链接文件。
Unit
systemd 可以管理所有系统资源。不同的资源统称为 Unit(单位)。通过观察/usr/lib/systemd/system/下文件的后缀名就可以知道该服务的unit类型。
Unit 一共分成12种。
- Service unit:主要是系统服务,包括服务器本身所需要的本机服务以及网络服务都是!比较经常被使用到的服务大多是这种类型!所以,这也是最常见的类型了!
- Target unit:其实是一群unit的集合,例如multi-user.target其实就是一堆服务的集合~也就是说,选择执行multi-user.target就是执行一堆其他.service或.socket之类的服务就是了!
- Device Unit:硬件设备
- Mount Unit:文件系统的挂载点
- Automount Unit:自动挂载点
- Path Unit:文件或路径
- Scope Unit:不是由 Systemd 启动的外部进程
- Slice Unit:进程组
- Snapshot Unit:Systemd 快照,可以切回某个快照
- Socket Unit:进程间通信的 socket
- Swap Unit:swap 文件
- Timer Unit:定时器
systemctl指令
跟以前systemV需要service/chkconfig/setup/init等指令来协助不同,systemd就是仅有systemctl这个指令来处理而已。
systemctl [command] [unit] (服务基本操作)
command主要有:
- start:立刻启动后面接的unit
- stop:立刻关闭后面接的unit
- restart:立刻关闭后启动后面接的unit,亦即执行stop再start的意思reload:不关闭后面接的- - unit的情况下,重新载入配置文件,让设置生效
- enable:设置下次开机时,后面接的unit会被启动
- disable:设置下次开机时,后面接的unit不会被启动
- status:目前后面接的这个unit的状态,会列出有没有正在执行、开机默认执行否、登录等信息等!
- is-active:目前有没有正在运行中
[root@VM_0_10_centos ~]# systemctl status docker.service //查看docker服务状态
● docker.service - Docker Application Container Engine
Loaded: loaded (/usr/lib/systemd/system/docker.service; enabled /*开机自启动。static:这个daemon不可以自己启动(enable不可),不过可能会被其他的enabled的服务来唤醒(相依属性的服务); mask:这个daemon无论如何都无法被启动!因为已经被强制注销(非删除)。可通过systemctl unmask方式改回原本状态*/; vendor preset: disabled)
Active: active (running) /*inactive:这个服务没有运行*/ since 二 2018-03-06 19:00:00 CST; 1 months 4 days ago
Docs: http://docs.docker.com
Main PID: 4652 (dockerd-current)
Memory: 22.1M
CGroup: /system.slice/docker.service
├─ 4652 /usr/bin/dockerd-current --add-runtime docker-runc=/usr/li...
├─ 4656 /usr/bin/docker-containerd-current -l unix:///var/run/dock...
├─30036 /usr/libexec/docker/docker-proxy-current -proto tcp -host-...
└─30040 /usr/bin/docker-containerd-shim-current 37d0c20b039d243631...
systemctl [command] [--type=TYPE] [--all] (观察系统上所有服务)
command:
list-units:依据unit列出目前有启动的unit。若加上--all才会列出没启动的。
list-unit-files:依据/usr/lib/systemd/system/内的文件,列出所有已经安装的unit。
--type=TYPE:就是之前提到的unittype,主要有service,socket,target等