Skip to main content
  1. 闲来无事 温雪煮茶/

systemd

·4 mins·
Table of Contents

systemd
#

img

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列表'
Sianao
Author
Sianao
a backend developer