systemd #
systemd 是一个 Linux 系统基础组件的集合,提供了一个系统和服务管理器,运行为 PID 1 并负责启动其它程序。功能包括:支持并行化任务;同时采用 socket 式与 D-Bus 总线式启用服务;按需启动守护进程(daemon);利用 Linux 的 cgroups 监视进程;支持快照和系统恢复;维护挂载点和自动挂载点;各服务间基于依赖关系进行精密控制。systemd 支持 SysV 和 LSB 初始脚本,可以替代 sysvinit。除此之外,功能还包括日志进程、控制基础系统配置,维护登录用户列表以及系统账户、运行时目录和设置,可以运行容器和虚拟机,可以简单的管理网络配置、网络时间同步、日志转发和名称解析等。
systemctl
#
systemctl list-units
获取所有的服务单元,显示所有服务单元的状态
systemctl status <name>.service
● 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 #
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文件的正确做法是创建像这里的这种文件
/etc/systemd/system/<单元名称> . <类型扩展>
对于要覆盖原有配置不建议直接修改原配置 而是通过对应的目录来修改
/etc/systemd/system/<unit>.d/overwrite.conf
systemd 单元的文件位置
/usr/lib/systemd/system/ |
systemd 随安装的软件包一起分发的单元文件。 |
---|---|
/run/systemd/system/ |
systemd 运行时创建的单元文件。此目录优先于已安装服务单元文件的目录。 |
/etc/systemd/system/ |
systemd 使用systemctl enable 命令创建的单元文件 |
示例文件
[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列表'