一、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 service
设定某服务开机启动
systemctl enable name.service
设定某服务开机禁止启动
systemctl disable name.service
查看服务是否开机自启
systemctl is-enabled name.servcice
查看服务的依赖关系
systemctl list-dependencies
查看启动失败的服务
systemctl --failed -t service
查看服务单元的启用和禁用状态
systemctl list-unit-files –t=service
杀死进程
systemctl kill 进程名
查看服务是否开机自启
systemctl is-enabled name.servcice
查看开机启动项
systemctl list-unit-files | grep enable
为服务添加开机启动项
systemctl enable name.service
移除开机启动项的服务
systemctl disable name.service
查找所有或者某个服务
systemctl list-units --type=service
服务状态
- systemctl list-units -t service -a 显示状态
- loaded:unit配置文件已处理
- active(running):一次或多次持续处理的运行
- active(exited):成功完成一次性的配置
- active(waiting):运行中,等待一个事件
- inactive:不运行
- enabled:开机启动
- disabled:开机不启动
- static:开机不启动,但可以被另一个启用的服务激活
网友评论