Systemd基本使用
概述
systemd
是一个Linux
系统基础组件的集合,提供了一个系统和服务管理器,运行为PID 1
并负责启动其它程序。功能包括:
- 支持并行化任务;
- 同时采用
socket
式与D-Bus
1总线式激活服务; - 按需启动守护进程(daemon);
- 利用
Linux
的cgroups
监视进程; - 支持快照和系统恢复;
- 维护挂载点和自动挂载点;
- 各服务间基于依赖关系进行精密控制。
Unit
systemd单元文件的语法来源于XDG桌面项配置文件.desktop
文件,最初的源头则是Microsoft Windows的.ini
文件。单元文件可以从多个地方加载:
|
|
输出结果类似如下:
|
|
有效的Unit名称包含一个名称前缀加上.
再加上Unit类型,如:test.service
Unit类型
Unit一共可以分为12种:
- 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管理
查看Unit状态
systemctl status
命令用于查看系统状态和单个Unit的状态。
以下是常用的查看Unit状态的示例:
|
|
启动服务
|
|
停止服务
|
|
重启服务
|
|
重新加载服务的配置文件
|
|
Unit配置
每一个Unit都有一个配置文件,告诉Systemd怎么启动这个Unit。
Unit通过区块来配置对应的信息,常用的区块信息如下:
[unit]
这个部分是用来记录一些与Unit相关的信息的,与Unit的类型无关。
[install]
这个部分通常是配置文件的最后一个区块,用来定义如何启动,以及是否开机启动。
[service]
这个块用来Service的配置,只有Service类型的Unit才有这个区块。
systemd-resolve
该服务是
systemd
包的一部分,默认被安装。
systemd-resolved
是一个systemd
服务,它通过D-Bus接口、解析NSS
服务(nss-resolve(8)
)和127.0.0.53
上的本地DNS stub listener为本地应用程序提供DNS解析。
基本概念
NSS
名称服务交换(NSS)工具是GNU C库(glibc)的一部分,支持用于解析域名的getaddrinfo
API。NSS允许系统数据库由单独的服务提供,其搜索顺序可以由管理员在nsswitch.conf(5)
中配置。负责域名解析的数据库是hosts数据库,glibc为其提供以下服务:
- files:读取
/etc/hosts
文件,参见hosts(5) - dns:读取
/etc/resolv.conf
的glibc解析器,参见resolv.conf(5)
systemd
为主机名解析提供三种NSS服务:
- nss-resolve — 缓存DNS存根解析器,在systemd-resolved 中描述
- nss-myhostname — 无需编辑
/etc/hosts
即可提供本地主机名解析 - nss-mymachines — 为本地systemd-machined(8) 容器的名称提供主机名解析
配置
systemd-resolved
为域名系统 (DNS)(包括DNSSEC和DNS over TLS)、多播DNS(mDNS)和链路本地多播名称解析(LLMNR)提供解析器服务。
可以通过编辑/etc/systemd/resolved.conf
和/或在/etc/systemd/resolved.conf.d/
中插入.conf
文件来配置解析器。
resolvectl
常用命令
查询DNS
|
|
查询DNS状态
|
|
systemd-networkd
netplan
进行网络管理。systemd-networkd
是一个管理网络配置的系统守护进程。它检测并配置出现的网络设备;它还可以创建虚拟网络设备。此服务对于为由systemd-nspawn
管理的容器或虚拟机设置复杂的网络配置特别有用。它也适用于简单的连接。
systemd-journald
Systemd统一管理所有Unit的启动日志。带来的好处就是,可以只用journalctl
一个命令,查看所有日志(内核日志和应用日志)。日志的配置文件是/etc/systemd/journald.conf
。
journalctl常用命令
查看所有日志
|
|
查看内核日志
|
|
查看本次系统启动日志
|
|
查看指定时间日志
|
|
查看指定Unit日志
|
|
查看指定优先级日志
|
|
优先级可以有以下类别:
优先级 | 描述 | 备注 |
---|---|---|
0 | emerg |
|
1 | alert |
|
2 | crit |
|
3 | err |
|
4 | warning |
|
5 | notice |
|
6 | info |
|
7 | debug |
显示日志占据的硬盘空间
|
|
systemd-timesyncd
该组件用于时间同步。
常用语句
查看状态
|
|
配置
与NTP相关的配置文件在/etc/systemd/timesyncd.conf
中,可以在这里面修改对应的ntp服务器。
|
|
参考文献
Unit配置相关
systemd-resolve相关
systemd-networkd相关
-
D-BUS是一个提供简单的应用程序互相通讯的途径的自由软件项目,它是做为freedesktoporg项目的一部分来开发的,是一个3层架构的进程间通信系统(IPC)。 ↩︎