systemd 简介
Systemd 是由红帽公司的一名叫做 Lennart Poettering 的员工开发, systemd 是 linux 系统中最新的初始化系统( init ) , 它主要的设计目的是克服 Sys V 固有的缺点,提高系统的启动速度, systemd 和 upstart 是竞争对手, ubantu 上使用的是 upstart 的启动方式, centos7 上使用 systemd 替换了 Sys V , Systemd 目录是要取代 Unix 时代依赖一直在使用的 init 系统,兼容 SysV 和 LSB 的启动脚本,而且能够在进程启动中更有效地引导加载服务。
system :系统启动和服务器守护进程管理器,负责在系统启动或运行时,激活系统资源,服务器进程和其他进程,根据管理,字母 d 是守护进程( daemon )的缩写, systemd 这个名字的含义就是它要守护整个系统。
Systemd 新特性
系统引导时实现服务并行启动
按需启动守护进程
自动化的服务依赖关系管理
同时采用 socket 式与 D-Bus 总线式激活服务
系统状态快照和恢复
利用 Linux 的 cgroups 监视进程
维护挂载点和自动挂载点
各服务间基于依赖关系进行精密控制
systemd 核心概念
unit 表示不同类型的 sytemd 对象,通过配置文件进行标识和配置,文件中主要包含了系统服务,监听 socket 、保存的系统快照以及其他与 init 相关的信息
配置文件 :
/usr/lib/systemd/system :每个服务最主要的启动脚本设置,类似于之前的 /etc/initd.d
/run/system/system : 系统执行过程中所产生的服务脚本,比上面的目录优先运行
/etc/system/system :管理员建立的执行脚本,类似于 /etc/rc.d/rcN.d/Sxx 类的功能,比上面目录优先运行,在三者之中,此目录优先级最高
Unit 类型
systemctl -t help 查看 unit 类型
service unit :文件扩展名为 .service ,用于定义系统服务
target unit :文件扩展名为 .target ,用于模拟实现“运行级别”
device unit:.device,, 用于定义内核识别的设备
mount unit .mount ,定义文件系统挂载点
socket unit .socket, 用于标识进程间通信用的 socket 文件,也可以在系统启动时,延迟启动服务,实现按需启动
snapshot unit : .snapshot ,关系系统快照
swap unit : .swap ,用于表示 swap 设备
automount unit : .automount ,文件系统的自动挂载点如: /misc 目录
path unit : .path ,用于定义文件系统中的一个文件或目录使用,常用于当文件系统变化时,延迟激活服务,如 spool 目录
time : .timer 由 systemd 管理的计时器

使用 systemctl 控制单元时,通常需要使用单元文件的全名,包括扩展名,但是有些单元可以在 systemctl 中使用简写方式
如果无扩展名, systemctl 默认把扩展名当做 .service 。例如 netcfg 和 netcfg.service 是等同的
挂载点会自动转化为相应的 .mount 单元,例如 /home 等价于 home.mount
设备会自动转化为相应的 .device 单元,所以 /dev/sd2 等价于 dev-sda2.device
关键特性
基于 socket 的激活机制: socket 与服务进程分离
基于 D-Bus 的激活机制
基于 device 的激活机制
基于 path 的激活机制
系统快照:保存各 unit 的当前状态信息于持久存储设备中想后兼容 sysv init 脚本
不兼容
systemctl 命令固定不变,不可扩展
非由 systemd 启动的服务, systemctl 无语与之通信和控制,如:使用之前 sys v 风格管理的进程就无法收 systemd 控制
systemd 基本工具
监视和控制 systemd 的主要命令是 systemctl 。该命令可用于查看系统状态和管理系统及服务。
管理服务
命令: systemctl command name.service
启动: service name start >systemctl start name.service
停止: service name stop >systemctl stop name.service
重启: service name restart >systemctl restart name.service
状态: service name status >systemctl status name.service
条件式重启:已启动才重启,否则不做任何操作
systemctl try-restart name.service
重载或重启服务:先加载,然后再启动
systemctl reload-or-try-restart name.service
禁止自动和手动启动
systemctl mask name.service
执行此条命令实则创建了一个链接 ln -s '/dev/null' '/etc/systemd/system/sshd.service'
取消禁止
systemctl unmask name.service
删除此前创建的链接
服务查看
查看某服务当前激活与否的状态
systemctl is-active name.service
如果启动会显示 active ,否则会显示 unknown
查看所有已经激活的服务
systemctl list-units t| type service

查看所有服务
systenctl list-units -t service -a |-all

设定某服务开机启动
chkconfig name on >systemctl enable name.service
设定某服务开机禁止启动
chkconfig name off >systemctl disable name.service
查看所有服务的开机自启状态
chkconfig list >systemctl list-unit-files -t service

用来列出该服务在那些运行级别下启用或禁用
chkconfig sshd list >ls /etc/system/system/*.wants/sshd.service
[root@server system]# ls /etc/systemd/system/*.wants/sshd.service/etc/systemd/system/multi-user.target.wants/sshd.service
查看服务是否开机自启
systemctl is-enabled name.servcice
查看服务的依赖关系:
systemctl list-dependencies

查看启动失败的服务
systemctl -failed -t service

查看服务单元的启用和禁用状态
systemctl list-unit-files t=service
杀死进程
systemctl kill 进程名

服务状态
systemctl list-units -t service -a 显示状态
loaded : unit 配置文件已处理
active ( running ):一次或多次持续处理的运行
active ( exited ):成功完成一次性的配置
active ( waiting ) : 运行中,等待一个事件
inactive :不运行
enabled :开机启动
disabled :开机不启动
static :开机不启动,但可以被另一个启用的服务激活

运行级别
target units :
unit 配置文件: .target 以 target 结尾的文件
ls /usr/lib/system/system/*.target
systemctl list-unit-files -type target -all
0 >runlevel0.target, poweroff.target
1 >runlevel1.target, rescue.target
2 >runlevel2.target, muti-user.target
3 >runlevel3.target, mutil-user.target
4 >runlevel4.target, multi-user.target
5 >runlevel5.target, graphical.target
6 >runlevel6.target, reboot.target

查看依赖性
systemctl list-dependencies graphical.target
查看默认运行级别
systemctl get-default 在 Sys V 风格的系统上是查看 /etc/inittab 文件其中有一条 id:5:initdefault:
级别切换
systemctl isolate muti-user.target
注意:只有当 /lib/system/system/*.target 文件中 AllowIsolate=yes 时才能奇幻(修改文件需执行 systemctl daemon-reload 生效)
设定默认运行级别
systemctl set-default mu