整理systemd相关学习,部分转载自:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-commands.html
概述
systemd主要用于替代原有的init启动方式,相对init提供了更为全面、强大的系统服务监控、管理和维护功能,摒弃了init仅支持串行执行、功能单一(执行脚本)的缺点。但一定程度上被认为破坏了unix的KISS的设计哲学。
主要命令:systemctl,在sudo下执行
架构图:
主要作用
systemd管理所有系统资源,资源抽象为unit:
- Service unit:系统服务
- Target unit:多个 Unit 构成的一个组
- Device Unit:硬件设备
- Mount Unit:文件系统的挂载点
- Automount Unit:自动挂载点
- Path Unit:文件或路径
- Scope Unit:不是由 Systemd 启动的外部进程
- Slice Unit:进程组
- Snapshot Unit:Systemd 快照,可以切回某个快照
- Socket Unit:进程间通信的 socket
- Swap Unit:swap 文件
- Timer Unit:定时器
启动unit:systemctl xxx start,停止:……
启动和停止等时候会对依赖进行相应的处理(这也是为什么要用这个命令启动一些服务,否则一些依赖无法满足,有些服务就会启动失败。)
配置文件
systemd配置文件一般在/etc/systemd/system/,里面的文件一般都是链接,真正的文件一般在/usr/lib/systemd/system/。系统启动时候回自动从这里读取配置。systemctl enable在两者之间建立链接关系(所以一直用这个命令来设置开机启动)。
服务配置文件修改后,需要调用systemctl daemon-reload重载配置,并且重新启动所需服务。
配置文件格式:
$ systemctl cat atd.service
[Unit]
Description=ATD daemon
[Service]
Type=forking
ExecStart=/usr/bin/atd
[Install]
WantedBy=multi-user.target
一般都是分为多个区块,[]内的字符串即为区块名称。然后下面就是一堆kv值作为配置值。
Unit区块一般用于定义该unit的元数据,以及与其他unit的联系和依赖。
Install区块用来定义如何启动,以及是否开机启动,通常是最后一个区块。
对于Service Unit,还有Service区块配置服务命令、服务元数据、启动指令等信息。
完全清单见:https://www.freedesktop.org/software/systemd/man/systemd.unit.html
Target
一个Unit组,可以看做是对一个系统状态的定义(一组unit),启动到某个target就像是启动到某种状态。
可以用systemctl list-unit-files --type=target命令查看当前的所有targets。
多个Target可以共存,并不互斥。可以通过形如systemctl set-default multi-user.target的命令设置开机启动的默认target。可以通过这种方式实现开机自启设置。
日志管理
systemd所有操作的日志由journalctl统一管理。使用journalctl命令可以查看。