什么是systemd
systemd即为system daemon,是Centos 7上用于替换init启动进程的新的启动进程。systemd出现的主要目的为减少系统引导时间和计算开销。Systemd(系统管理守护进程)最开始以GNU GPL协议授权开放,现在已转为GNU LGPL协议。Linux系统使用Systemd引导程序取代传统的SysV init,Systemd兼容init开机启动脚本。
Systemd的特性
Systemd的以下几点特性:
1、基于socket的激活机制,systemd为支持此机制的服务监听socket,当接收到来自客户端的socket通信时,由systemd激活对应的服务,应答客户端的请求;
2、基于bus的激活机制。
3、基于device的激活机制,当有设备接入到系统时,systemd会自动激活device、mount、automount等unit来识别、挂载、接入对应的设备;
4、基于path的激活机制,当某个文件路径变得可用时或路径出现相应的文件时,激活相应的服务;
5、系统快照机制,保存各unit的当前状态信息到持久存储中,在下次开机时可恢复之前某次快照时的系统状态,必要时可自动载入;
6、兼容Centos 5的SysV init 以及Centos 6的upstart机子,能够继续使用/etc/rc.d/init.d目录中的服务管理脚本。
7、系统引导时,其服务的启动时并行的;
8、按需激活进程;
9、基于依赖关系定义了服务控制逻辑;
unit的概念
Systemd的unit用于对相关配置文件进行标识、识别和配置,unit文件中主要包含了系统服务、监听的socket接口、保存的快照以及其他与init启动相关的信息。unit文件主要保存在:
1、/usr/lib/systemd/systemd
2、/run/systemd/system
3、/etc/systemd/system
unit的常见类型有以下:
service:文件后缀为.service,用于定义系统服务;
socket:文件后缀为.socket,用于标识进程间通信使用的socket文件;
target:文件后缀.target,用于模拟实现“运行级别”;
snapshot:文件后缀.snapshot,用于管理系统快照;
device:文件后缀.device,用于定义内核识别的设备;
mount:文件后缀.mount,用于定义文件系统挂载点;
automount:文件后缀.automount,用于定义文件系统的自动挂载点;
swap:文件后缀.swap,用于标识swap设备;
timer:文件后缀.timer,用于管理计划任务;
path:文件后缀.path,用于根据文件系统上特定对象的变化来启动其他服务;
slice:文件后缀.slice,用于资源管理;
scope:文件后缀.scope,用于外部创建的进程;
系统支持的unit类型,可通过命令systemctl -t help
查看。
unit文件的组成
Systemd的unit文件通常由三部分组成:[Unit],[Service] 和[Install],其分别代表:
[Unit]:定义与unit类型无关的通用选项;用于提供unit的描述信息、unit行为及依赖关系等;
[Service]:与特定类型相关的专用选项,与unit类型相同,此处为service类型;
[Install]:定义由"systemctl enable|disable"命令在实现服务启动或禁用时用到的一些选项;
[Unit]的内容包括:
Description:描述信息;
After:定义unit的启动次序;表示当前unit应该晚于哪些unit启动;其功能与Before相反;
Requires:依赖的units,此为强依赖,当被依赖的units无法激活时,当前unit即无法激活;
Wants:依赖的units,弱依赖;
Conflicts:定义冲突关系;
[Service]的内容包括:
Type:用于定义影响ExecStart及相关参数的功能的unit进程启动类型;其类型包括:simple,forking,oneshot,dbus,notify,idle等等;
EnvironmentFile:环境配置文件;
ExecStart:指定启动unit要运行的命令或脚本;其中ExecStartPre表示启动unit前运行的脚本或命令;ExecStartPost表示启动unit后要运行的命令或脚本;
ExecStop:指明停止unit要运行的命令或脚本;
Restart:指定
[Install]的内容包括:
Alias:别名;
RequiredBy:该服务被哪些units所依赖;强依赖;
WantedBy:该服务被哪些units所依赖;弱依赖;
如想了解更详细的unit文件内容,可man一下systemd.unit、system.service、system.kill等文件进行参看。