systemd

img

systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序。功能包括:支持并行化任务;同时采用 socket 式与 D-Bus 总线式启用服务;按需启动守护进程(daemon);利用 Linux 的 cgroups 监视进程;支持快照和系统恢复;维护挂载点和自动挂载点;各服务间基于依赖关系进行精密控制。systemd 支持 SysV 和 LSB 初始脚本,可以替代 sysvinit。除此之外,功能还包括日志进程、控制基础系统配置,维护登录用户列表以及系统账户、运行时目录和设置,可以运行容器和虚拟机,可以简单的管理网络配置、网络时间同步、日志转发和名称解析等。

systemctl

  • systemctl list-units

获取所有的服务单元,显示所有服务单元的状态

  • systemctl status <name>.service
1
2
3
4
5
6
7
8
9
10
11
12
● sddm.service - Simple Desktop Display Manager
Loaded: loaded (/usr/lib/systemd/system/sddm.service; enabled; preset: disabled)
Active: active (running) since Sat 2024-07-06 21:38:25 CST; 3h 50min left
Invocation: 683da32dbf73444c9a5379f1b7925c0f
Docs: man:sddm(1)
man:sddm.conf(5)
Main PID: 1056 (sddm)
Tasks: 10 (limit: 18584)
Memory: 143.1M (peak: 275.8M swap: 34M swap peak: 34M zswap: 14.1K)
CPU: 580ms
CGroup: /system.slice/sddm.service
├─1056 /usr/bin/sddm
描述
Loaded 是否服务单元已载入的信息,单元文件的绝对路径,以及是否在引导时启动该单元的说明。
Active 服务单元是否在运行的信息,后面有一个时间戳。
Main PID 进程 ID 和相应系统服务的名称。
Status 相关系统服务的额外信息。
Process 有关相关进程的附加信息。
CGroup 有关相关的控制组(cgroups)的额外信息。
  • systemctl is-active <name>.service 查看服务的状态
  • systemctl is-enabled <name>.service 查看服务是否是自动启动
  • systemctl list-dependencies --[after,before] <name>.service 查看服务启动先后顺序
  • systemctl mask <name>.service 让一个服务不能启动
  • systemctl start <name>.service 启动一个服务
  • systemctl stop <name>.service 关闭一个服务
  • systemctl restart <name>.service 重启一个服务
  • systemctl enable <name>.service 让一个服务自启动
  • systemctl disable <name>.service 取消一个服务自启动
  • systemctl mask <name>.service 让一个服务不能启动

tldr

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
tldr systemctl

systemctl

Control the systemd system and service manager.
More information: https://www.freedesktop.org/software/systemd/man/systemctl.html.

- Show all running services:
systemctl status

- List failed units:
systemctl --failed

- Start/Stop/Restart/Reload/Show the status a service:
systemctl start|stop|restart|reload|status unit

- Enable/Disable a unit to be started on bootup:
systemctl enable|disable unit

- Reload systemd, scan for new or changed units:
systemctl daemon-reload

- Check if a unit is active/enabled/failed:
systemctl is-active|is-enabled|is-failed unit

- List all service/socket/automount units filtering by running/failed state:
systemctl list-units --type=service|socket|automount --state=failed|running

- Show the contents & absolute path of a unit file:
systemctl cat Unit

列出在这个服务之前或者这个服务之后启动之前的列表

systemd file

systemd 文件格式

类型主要为 当然还有一些其他的东西

  • service
  • socket
  • device
  • mount

对于激活systemd文件的正确做法是创建像这里的这种文件

1
/etc/systemd/system/<单元名称> . <类型扩展>

对于要覆盖原有配置不建议直接修改原配置 而是通过对应的目录来修改

1
/etc/systemd/system/<unit>.d/overwrite.conf

systemd 单元的文件位置

/usr/lib/systemd/system/ systemd随安装的软件包一起分发的单元文件。
/run/systemd/system/ systemd运行时创建的单元文件。此目录优先于已安装服务单元文件的目录。
/etc/systemd/system/ systemd使用systemctl enable命令创建的单元文件

示例文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
[Unit]
Description='这个是一个描述'
Documentation='提供一个文档地址用来描述'
After='表明这个要在哪一个服务启动之后再启动'
Requires='标明与其他Unit的依赖关系 要是其中的一个依赖失败了之后,就不会启动这个'
Wants='比上一个弱一级 只是表明'

[Service]
## simple– 默认值。启动的进程ExecStart是服务的主进程。
## forking– 启动的进程ExecStart会生成一个子进程,该子进程将成为服务的主进程。启动完成后,父进程将退出。
## oneshot– 此类型与 类似simple,但该过程在启动后续单元之前退出。
## notify– 此类型与 类似simple,但仅在通过 sd_notify() 函数发送通知消息后才会启动后续单元。
Type='simple'
ExecStart='启动脚本'
ExecStop='关闭的时候要做的事情'
ExecReload='重载的时候需要的操作'
Restart='指定重启策略'


[Install]
Alias='别名'
RequiredBy='依赖于该Unit的Unit列表'
WantedBy='Want于该Unit的Unit列表'
Also='对于一起安装的uint或者卸载的unit列表'