systemd
是 Linux
系统的一种 中央化系统及设置管理程序(init)
,包括有守护进程
、程序库
以及应用软件
组成。目标是解决系统服务间的依赖关系,并依此实现系统初始化时服务的并行启动,同时达到降低系统的开销。
历史
在旧的 Linux
中,服务启动一直采用 init
进程。如:
$ /etc/init.d/apache2 start
$ service apache2 start
缺点如下:
- 启动时间长:串行启动进程
- 启动脚本复杂:
init
进程只是执行启动脚本,不管其他事情,因此脚本需要处理各种异常情况
介绍
- Systemd 是 Linux 的系统启动器之一
- 在
Unix
中通常以 d
作为系统 守护进程(daemon)
的后缀标识。Systemd
就是它要守护整个系统的进程,因此其 pid
为 1
。
$ systemctl --version
systemd 215
+PAM +AUDIT +SELINUX +IMA -APPARMOR +SMACK +SYSVINIT +UTMP +LIBCRYPTSETUP +GCRYPT +GNUTLS +ACL +XZ +LZ4 -SECCOMP +BLKID +ELFUTILS +KMOD +IDN
$ pstree 1
systemd─┬─AliSecGuard───6*[{AliSecGuard}]
├─AliYunDun───23*[{AliYunDun}]
...
常见 systemd 文件
- 所有的单元文件:
systemctl list-unit-files
- Service units: 以
.service
结尾的配置文件,记录由 systemd 控制和监督的进程的信息
- 查看命令
systemctl list-unit-files --type service
man systemd.service
- Socket units: 以
.socket
结尾的配置文件,编码包括 IPC 或网络套接字 Socket
或文件系统FIFO
的信息,用于 socket 的激活,由 systemd 控制和监督,如 systemctl cat docker.socket
- Target units: 以
.target
结尾的配置文件,编码 systemd 目标单元的信息,用于单元分组和启动时作为同步点
Timer units
定时器
man systemd.timer
systemctl list-unit-files --type timer
Slice units
资源的分配
systemctl list-unit-files --type slice
路径
/lib/systemd/system
默认 units 文件路径
/etc/systemd/system
配置文件
/usr/lib/systemd/system
用户自己定义的单元文件
systemctl
管理命令
# 启动
$ systemctl start <UnitName>
# 关闭
$ systemctl stop <UnitName>
# 重启
$ systemctl restart <UnitName>
# 查看状态
$ systemctl status <UnitName>
# 开机启动
$ systemctl enable <UnitName>
# 禁止开机启动
$ systemctl disable <UnitName>
# 杀死进程
$ systemctl kill <UnitName>
systemd-analyze
# 查看启动耗时
$ systemd-analyze
# 查看每个服务的启动耗时
$ systemd-analyze blame
# 显示瀑布状的启动过程流
$ systemd-analyze critical-chain
# 显示指定服务的启动流
$ systemd-analyze critical-chain atd.service
loginctl
# 查看当前登录的用户
$ loginctl list-sessions
$ loginctl list-users
$ loginctl show-user root