Unit (单元)

总览

Unit ( 单元 ) 是 Systemd 管理系统的基本单位,分为:

  • 系统服务 ( .service )

  • 挂载点 ( .mount )

  • Sockets 套接字 ( .sockets )

  • 系统设备 ( .device )

  • 交换分区 ( .swap )

  • 文件路径 ( .path )

  • 启动目标 ( .target )

  • 计时器 ( .timer )

最常用的为系统服务单元,作为守护进程使用。

通常在控制单元时使用文件全名,但在指系统服务单元时可省略 .service 扩展名。

systemctl

控制 systemd 的主要命令为 systemctl,此命令可用于查看系统状态以及管理系统与服务。

常用的子命令有:

  • start 激活单元

  • stop 停止单元

  • restart 重启单元

  • reload 在不重启服务的情况下重新加载配置文件

  • status 输出单元运行状态

  • enable 设置开机自启

  • disable 取消开机自启

  • is-enabled 查看是否设为开机自启

  • cat 查看单元配置文件内容

  • daemon-reload 重新载入 systemd 系统配置,但不会重新加载变更的单元文件

一些示例:

# 启动 SSH 服务
$ sudo systemctl start ssh.service
# 如运行正常不会有额外提示

# 查看 ntpd 运行状态
$ systemctl status ntp.service
 ntp.service - Network Time Service
   Loaded: loaded (/lib/systemd/system/ntp.service; enabled; vendor preset: enabled)
   Active: active (running) since Tue 2021-01-12 22:25:41 CST; 2 weeks 5 days ago
     Docs: man:ntpd(8)
 Main PID: 3783 (ntpd)
    Tasks: 2 (limit: 2258)
   Memory: 2.1M
   CGroup: /system.slice/ntp.service
           └─3783 /usr/sbin/ntpd -p /var/run/ntpd.pid -g -u 107:112

# 设置 open-vm-tools 开机自启
$ sudo systemctl enable open-vm-tools.service

# 重载配置文件,当添加新单元文件时须执行
$ sudo systemctl daemon-reload

创建或修改单元文件

创建单元

systemd 的系统级单元放在以下两个目录中:

  • /usr/lib/systemd/system/ 软件包安装的单元

  • /etc/systemd/system/ 自行安装的单元

systemd 可以使用用户模式运行,存放单元的目录也有所不同。

书写单元按照其他单元的格式仿写即可,例如,一个最简单的单元内容如下:

[Unit]
# 指定名称
Description=Foo

[Service]
# 设置启动单元时所要启动的项目,可为二进制程序或 Shell 脚本。
# 必须指定绝对路径,例如需要使用 Python 脚本需要写成
# /usr/bin/python3 /root/scripts.py
ExecStart=/usr/sbin/foo-daemon

[Install]
# 指定此单元在哪种 target 启动
WantedBy=multi-user.target

修改

如要修改软件包安装后附带的单元,最好不要在原始文件进行修改,而是在 /etc/systemd/system/<单元名>.d/ 目录中新建 *.conf 文件,在文件内部写入要新增或修改的参数。

注:可能被多次赋值的变量,如 Execstart 等,在修改前需要先用一行将变量制空

如要修改自行建立的单元,使用 systemctl edit 单元名 即可打开编辑器,修改完成后会自动重新加载。

最后更新于