unit文件的扩展名
在 Linux 中,systemd
的 Unit 文件有多种扩展名,每种扩展名对应不同类型的 Unit。常见的 Unit 文件扩展名如下:
.service
- 服务单元,通常用于定义启动、停止和管理系统服务。.socket
- 套接字单元,描述网络或 IPC 套接字,通常与.service
单元一起使用。.target
- 目标单元,用于将多个单元组进行逻辑上的组织,类似于传统的运行级别(runlevel)。.mount
- 挂载点单元,用于定义文件系统挂载点。.automount
- 自动挂载单元,描述一个自动挂载点。.swap
- 交换空间单元,定义系统的交换设备或交换文件。.path
- 路径单元,监控文件或目录的状态,并根据变化触发相应的.service
。.timer
- 计时器单元,用于定期启动某个.service
单元,类似于cron
作业。.slice
- 切片单元,用于组织和管理进程的层次结构,通常与资源控制(CGroup)相关。.scope
- 范围单元,类似于.service
,但由外部进程创建和管理的进程组。
每种扩展名代表了一种特定类型的任务或资源管理方式,在 systemd
的生态系统中有着不同的用途。
unit文件的语法格式
systemd
的 Unit 文件采用了类似 INI
配置文件的语法格式,由多个段落(section)和键值对(key-value pair)组成。下面是 Unit 文件的基本语法格式和结构:
基本结构
-
段落(Section)
段落名用方括号包围,如[Unit]
。常见的段落有[Unit]
、[Service]
、[Install]
等。 -
键值对(Key-Value Pair)
在每个段落内部,用key=value
的形式定义键值对。key
是指令,value
是参数。
常见段落
-
[Unit]
描述单元的一般信息,比如说明、依赖等。Description=
:描述该单元的用途。Documentation=
:指向该单元的文档链接。Requires=
:该单元所依赖的其他单元,必须启动。Wants=
:该单元希望启动的其他单元,但非必须。Before=
:指定该单元要在其他某个单元之前启动。After=
:指定该单元要在其他某个单元之后启动。
-
[Service]
仅用于.service
单元,定义服务的行为。ExecStart=
:指定服务启动时执行的命令或脚本。ExecStop=
:指定服务停止时执行的命令。ExecReload=
:指定服务重载时执行的命令。Restart=
:定义服务在退出后的重启策略(如on-failure
)。Type=
:指定服务的启动类型(如simple
,forking
,oneshot
,notify
,idle
)。User=
:定义该服务以哪个用户身份运行。WorkingDirectory=
:指定服务运行的工作目录。
-
[Install]
定义该单元如何安装,通常用于启用或禁用单元。WantedBy=
:指定该单元在哪些target
下启用。RequiredBy=
:表示哪些单元需要此单元。
示例:一个简单的 .service
文件
[Unit]
Description=My Custom Service
Documentation=https://example.com/docs
After=network.target
[Service]
Type=simple
ExecStart=/usr/bin/my_custom_service
Restart=on-failure
User=myuser
WorkingDirectory=/var/myapp
[Install]
WantedBy=multi-user.target
其他常用段落
- [Socket]:用于
.socket
单元,定义套接字的行为。 - [Timer]:用于
.timer
单元,定义定时任务的行为。 - [Path]:用于
.path
单元,定义文件或目录的监控。
注意事项
- 键值对中的值是区分大小写的。
- 段落的顺序并不严格,但建议按照惯例将
[Unit]
放在文件开头,[Install]
放在文件末尾。 - 行末可以用
\
来换行。
这个语法格式灵活且功能强大,适用于定义和管理系统服务、定时任务、路径监控等多种功能。