一、systemd的由来与特性
CentOS7使用了systemd来管理系统,取代了CentOS 5的sysV init和CentOS 6的Upstart。systemd出现的主要目的为减少系统引导时间和计算开销。systemd兼容之前CentOS版本的init开机启动脚本。下图为systemd框架图:
systemd的特性
基于socket的激活机制:
systemd为支持此机制的服务监听socket,当有客户端与socket通信时,由systemd激活服务,应答客户端的请求;这种机制类似于守护进程。基于bus的激活机制:
基于总线的激活基于device的激活机制:
当有设备接入时,systemd会自动激活device、mount、automount等unit来识别,挂载接入的设备基于Path的激活机制:
当某个文件路径变得可用时或路径出现相应文件时,激活对应服务向后兼容:
兼容CentOS 5的sysV init以及CentOS 6的upstart机制,也就是说可以继续将服务管理脚本放入/etc/rc.d/init.d目录中管理系统引导时实现服务并行启动:
使用并行的方法启动服务,不像SysV init是顺序执行的,所以大大节省了系统启动时间按需激活进程:
只有需要此进程运行时,才激活进程支持快照和系统恢复:
保存各unit的当前状态信息到持久存储中,在下次开机时可恢复之前某次快照时的系统状态,必要时可自动载入基于依赖关系定义服务控制逻辑:
二、system的unit
何为unit:
unit由其相关配置文件进行标识、识别和配置;文件中主要包含了系统服务、监听的socket、保存的快照以及其它与init相关的信息;unit在系统中的路径:
软件包安装的系统单元:/usr/lib/systemd/system
运行时配置的系统单元:/run/systemd/system
本地配置的系统单元:/etc/systemd/systemunit的类型:
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,文件系统自动点设备;
Path unit: .path, 用于定义文件系统中的一文件或目录;systemd与sysV init 以及upstart不兼容之处:
- /etc/rc.d/init.d目录中的服务管理脚本不可以用systemctl命令来管理,systemctl命令的参数已经固定
- /etc/rc.d/init.d目录中的服务管理脚本启动的服务,与systemd管理启动的进程之间无法通信
- systemd虽然模拟出run level,但是与init、upstart机制的运行级别不完全一致
- service unit
系统服务新老机制对应:
启动:service name start ==> systemctl start name.service
停止:service name stop ==> systemctl stop name.service
重启:service name restart ==> systemctl restart name.service
状态:service name startus ==> systemctl startus name.service
条件式重启:service name condrestart ==> systemctl try-restart name.service
重载或重启服务:systemctl reload-or-restart name.service
重载或条件式重启服务:systemctl reload-or-try-restart name.service
禁止设定为开机自启:systemctl mask name.service
取消禁止设定为开机自启:systemctl unmask name.service
查看某服务当前激活与否的状态:systemctl is-active name.service
查看所有已经激活的服务:systemctl list-units --type service
查看所有服务:systemctl list-units --type service --allchkconfig命令的对应关系:
设定某服务开机自启:chkconfig name on ==> systemctl enable name.service
禁止:chkconfig name off ==> systemctl disable name.service
查看所有服务的开机自启状态:chkconfig --list ==> systemctl list-unit-file --type service
查看服务是否开机自启:systemctl is-enable name.service
查看服务的依赖关系:systemctl list-dependencies name.service
- target units
- 运行级别:
0 ==> runlevel0.target,poweoff.target
1 ==> runlevel1.target, rescue.target
2 ==> runlevel2.target,multi-user.target
3 ==> runlevel3.target,multi-user.target
4 ==> runlevel4.target,multi-user.target
5 ==> runlevel5.target,graphical.target
6 ==> runlevel6.target,reboot.target - 级别切换:init N ==> systemctl isolate name.target
- 查看级别:runlevel ==> systemctl list-units --type target
- 获取默认运行级别:/etc/initab ==> systemctl get-default
- 修改默认级别:/etc/initab ==> systemctl set-default name.target
- 切换至紧急救援模式:systemctl rescue
- 切换至emergency模式:systemctl emergency
- 其他常用命令
关机: systemctl halt, systemctl poweroff
重启: systemctl reboot
挂起: systemctl suspend
快照: systemctl hibernate
快照并挂起: systemctl hybrid-sleep