searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Systemd unit文件常用配置项

2023-10-25 06:33:02
24
0

文件类型

系统资源类型

单元扩展名

单元文件描述

Service

.service

封装守护进程的启动、停止、重启和重载操作,是最常见的一种 Unit 文件

Target

.target

定义target信息及依赖关系,一般仅包含 Unit 段,可以建立不同模块的依赖关系,以进行统一的启停控制。

Device

.device

 /dev目录下的硬件设备,主要用于定义设备之间的依赖关系

Mount

.mount

定义文件系统的挂载点,可以替代过去的 /etc/fstab 配置文件

Automount

.automount

用于控制自动挂载文件系统,相当于 SysV-init 的 autofs 服务

Path

.path

用于监控指定目录或文件的变化,并触发其它 Unit 运行

Scope

.scope

这种 Unit 文件不是用户创建的,而是 Systemd 运行时产生的,描述一些系统服务的分组信息

Slice

.slice

用于表示一个 CGroup 的树

Snapshot

.snapshot

用于表示一个由 systemctl snapshot 命令创建的 Systemd Units 运行状态快照,可以切回某个快照

Socket

.socket

监控来自于系统或网络的数据消息

Swap

.swap

定义一个用户做虚拟内存的交换分区

Timer

.timer

用于配置在特定时间触发的任务,替代了 Crontab 的功能

配置

区块

 功能

[Unit]

启动顺序与依赖关系

[Service] 

启动行为定义

[Install] 

服务安装定义

[Unit]

常用选项配置:

选项

含义

Description

一段描述这个 Unit 文件的文字,通常只是简短的一句话。

Documentation

指定服务的文档,可以是一个或多个文档的URL路径。

Requires

此单元所必须依赖的其他单元。当启动此单元时,也必须启动这里列出的所有其他单元。 如果此处列出的某个单元启动失败、并且恰好又设置了到这个失败单元的 After= 依赖,那么将不会启动此单元。此外,无论是否设置了到被依赖单元的 After= 依赖,只要某个被依赖的单元被显式停止,那么该单元也会被连带停止。

Wants

Requires= 的弱化版。 当此单元被启动时, 所有这里列出的其他单元只是尽可能被启动。 但是,即使某些单元不存在或者未能启动成功, 也不会影响此单元的启动。

Before, After

强制指定单元之间启动的先后顺序。停止顺序与启动顺序相反。

BindsTo

与 Requires 相似,但是一种更强的关联。启动这个服务时会同时启动列出的所有模块,当有模块启动失败时终止当前服务。反之,只要列出的模块全部启动以后,也会自动启动当前服务。并且这些模块中有任意一个出现意外结束或重启,这个服务会跟着终止或重启。

PartOf

这是一个 BindTo 作用的子集,仅在列出的任何模块失败或重启时,终止或重启当前服务,而不会随列出模块的启动而启动。

OnFailure

当这个模块启动失败时,就自动启动列出的每个模块。

Conflicts

与这个模块有冲突的模块,如果列出模块中有已经在运行的,这个服务就不能启动,反之亦然。

上面这些配置中,除了 Description 外,都能够被添加多次。可以在同一行中用空格来分隔所有值,也可以分行进行指定。

[Install]

常用选项配置:

选项

 含义 

WantedBy

依赖当前服务的模块。

RequiredBy

依赖当前服务的模块。

Also

此单元的附属单元, 可以设为一个空格分隔的单元列表。 表示当使用 systemctl enable 启用 或 systemctl disable 停用此单元时, 也同时自动的启用或停用附属单元。

以上内容也可以被添加多次,使用空格进行分隔或多行分别配置。

WantedBy和RequiredBy的区别与Want和Require类似。

使用WantdBy和RequiredBy选项后还需要执行`systemctl enable XXX`(当前服务模块,即被依赖模块)才能真正生效,以在对应依赖模块的/etc/systemd/system/xxx.wants或xxx.require/路径下生成当前模块的软链接。可以使用`systemctl disable XXX`来取消这种依赖,即对软链接进行删除。

例如,开机自启abc.service就可以通过在其service文件中配置:

WantedBy=multi-user.target

然后执行:

systemctl enable abc

来实现。

执行下述命令来取消开机自启:

systemctl disable abc

[Service]

常用选项配置:

选项

含义

Type

simple, exec, forking, oneshot, dbus, notify, idle 其一。

常用的有 simple(默认类型) 和 forking。默认的 simple 类型可以适应于绝大多数的场景,因此一般可以忽略这个参数的配置。而如果服务程序启动后会通过 fork 系统调用创建子进程,然后关闭应用程序本身进程的情况,则应该将 Type 的值设置为 forking,否则 systemd 将不会跟踪子进程的行为,而认为服务已经退出。

RemainAfterExit

当该服务的所有进程全部退出之后, 是否依然将此服务视为活动(active)状态, 默认值为 no。这个配置主要是提供给一些并非常驻内存,而是启动注册后立即退出然后等待消息按需启动的特殊类型服务使用

ExecStart

在启动该服务时需要执行的命令行(命令+参数),在每个配置文件中只能使用一次。

ExecStartPre, ExecStartPost

在执行 ExecStart= 之前/后执行的命令行。 语法规则与 ExecStart= 完全相同。 如果设置了多个命令行, 那么这些命令行将以其在单元文件中出现的顺序 依次执行。

注意:不可将 `ExecStartPre=` 用于需要长时间执行的进程。 因为所有由 `ExecStartPre=` 派生的子进程都会在启动 `ExecStart=` 服务进程之前被杀死。

ExecReload

用于设置当该服务被要求重启时所执行的命令行。 语法规则与 ExecStart= 完全相同。

ExecStop

用于设置当该服务被要求停止时所执行的命令行。与 ExecStop= 不同,无论服务是否启动成功, 此选项中设置的命令都会在服务停止后被无条件的执行。

ExecStopPost

设置在该服务停止之后所执行的命令行。 语法规则与 `ExecStart=` 完全相同。

Restart

no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, always 其一。

当服务进程 正常退出、异常退出、被杀死、超时的时候, 是否重新启动该服务。 所谓"服务进程" 是指 ExecStart=, ExecStartPre=, ExecStartPost=, ExecStop=, ExecStopPost=, ExecReload= 中设置的进程。 当进程是由于 systemd 的正常操作(例如 systemctl stop|restart)而被停止时, 该服务不会被重新启动。

常用的是on, on-failure。

RestartSec

服务被重启前的等待秒数。默认值为100ms,不指定时间单位时默认以秒为单位。

TimeoutStartSec

该服务允许的最大启动时长。若超时未发出"启动成功"的信号则被视为启动失败,默认以秒为单位。

TimeoutStopSec

(1)  设置每个 ExecStop= 的超时时长。如果其中之一超时, 那么所有后继的 ExecStop= 都会被取消,并且该服务也会被 SIGTERM 信号强制关闭。 如果该服务没有设置 ExecStop= ,那么该服务将会立即被 SIGTERM 信号强制关闭。 

(2)  (2)设置该服务自身停止的超时时长。如果超时,那么该服务将会立即被 SIGTERM 信号强制关闭

默认以秒为单位。

TimeoutSec

同时设置 TimeoutStartSec= 与 TimeoutStopSec=

Environment

为服务添加环境变量,接受一个空格分隔的``VAR=VALUE`列表,可以多次使用此变量,同一个变量以最后一次设置为准。设为空表示清空先前所有已设置的变量。

注意:

(1)  不会在字符串内部进行变量展开(也就是"$"没有特殊含义);

(2)   如果值中包含空格或者等号,那么必须在字符串两边使用双引号(")界定。

EnvironmentFile

从文本文件中读取环境变量的设置。在路径前加上 "-" 前缀表示忽略不存在的文件。

User, Group

设置进程在执行时使用的用户与组。该设置会影响服务对本地文件系统的访问权限。

WorkingDirectory

进程的工作目录。当 systemd 作为系统实例运行时,此选项的默认值是 `/` ; 当 systemd 作为用户实例运行时,此选项的默认值是对应用户的家目录。给目录加上 "-" 前缀,那么表示即使此目录不存在,也不算致命错误。

Nice

服务的进程优先级,值越小优先级越高,默认为0。-20为最高优先级,19为最低优先级。

LimitCPU / LimitSTACK / LimitNOFILE / LimitNPROC 等

限制特定服务可用的系统资源量,例如 CPU,程序堆栈,文件句柄数量,子进程数量… 

Restart= 的设置分别对应于哪些退出原因:

退出原因(↓)

Restart= (→)

no

always

on-

success

on-

failure

on-

abnormal

on-

abort

on-

watchdog

正常退出

 

X

X

       

退出码不为"0"

 

X

 

X

     

进程被强制杀死

 

X

 

X

X

X

 

systemd 操作超时

 

X

 

X

X

   

看门狗超时

 

X

 

X

X

 

X

 

0条评论
0 / 1000
Mr. 油
89文章数
0粉丝数
Mr. 油
89 文章 | 0 粉丝
原创

Systemd unit文件常用配置项

2023-10-25 06:33:02
24
0

文件类型

系统资源类型

单元扩展名

单元文件描述

Service

.service

封装守护进程的启动、停止、重启和重载操作,是最常见的一种 Unit 文件

Target

.target

定义target信息及依赖关系,一般仅包含 Unit 段,可以建立不同模块的依赖关系,以进行统一的启停控制。

Device

.device

 /dev目录下的硬件设备,主要用于定义设备之间的依赖关系

Mount

.mount

定义文件系统的挂载点,可以替代过去的 /etc/fstab 配置文件

Automount

.automount

用于控制自动挂载文件系统,相当于 SysV-init 的 autofs 服务

Path

.path

用于监控指定目录或文件的变化,并触发其它 Unit 运行

Scope

.scope

这种 Unit 文件不是用户创建的,而是 Systemd 运行时产生的,描述一些系统服务的分组信息

Slice

.slice

用于表示一个 CGroup 的树

Snapshot

.snapshot

用于表示一个由 systemctl snapshot 命令创建的 Systemd Units 运行状态快照,可以切回某个快照

Socket

.socket

监控来自于系统或网络的数据消息

Swap

.swap

定义一个用户做虚拟内存的交换分区

Timer

.timer

用于配置在特定时间触发的任务,替代了 Crontab 的功能

配置

区块

 功能

[Unit]

启动顺序与依赖关系

[Service] 

启动行为定义

[Install] 

服务安装定义

[Unit]

常用选项配置:

选项

含义

Description

一段描述这个 Unit 文件的文字,通常只是简短的一句话。

Documentation

指定服务的文档,可以是一个或多个文档的URL路径。

Requires

此单元所必须依赖的其他单元。当启动此单元时,也必须启动这里列出的所有其他单元。 如果此处列出的某个单元启动失败、并且恰好又设置了到这个失败单元的 After= 依赖,那么将不会启动此单元。此外,无论是否设置了到被依赖单元的 After= 依赖,只要某个被依赖的单元被显式停止,那么该单元也会被连带停止。

Wants

Requires= 的弱化版。 当此单元被启动时, 所有这里列出的其他单元只是尽可能被启动。 但是,即使某些单元不存在或者未能启动成功, 也不会影响此单元的启动。

Before, After

强制指定单元之间启动的先后顺序。停止顺序与启动顺序相反。

BindsTo

与 Requires 相似,但是一种更强的关联。启动这个服务时会同时启动列出的所有模块,当有模块启动失败时终止当前服务。反之,只要列出的模块全部启动以后,也会自动启动当前服务。并且这些模块中有任意一个出现意外结束或重启,这个服务会跟着终止或重启。

PartOf

这是一个 BindTo 作用的子集,仅在列出的任何模块失败或重启时,终止或重启当前服务,而不会随列出模块的启动而启动。

OnFailure

当这个模块启动失败时,就自动启动列出的每个模块。

Conflicts

与这个模块有冲突的模块,如果列出模块中有已经在运行的,这个服务就不能启动,反之亦然。

上面这些配置中,除了 Description 外,都能够被添加多次。可以在同一行中用空格来分隔所有值,也可以分行进行指定。

[Install]

常用选项配置:

选项

 含义 

WantedBy

依赖当前服务的模块。

RequiredBy

依赖当前服务的模块。

Also

此单元的附属单元, 可以设为一个空格分隔的单元列表。 表示当使用 systemctl enable 启用 或 systemctl disable 停用此单元时, 也同时自动的启用或停用附属单元。

以上内容也可以被添加多次,使用空格进行分隔或多行分别配置。

WantedBy和RequiredBy的区别与Want和Require类似。

使用WantdBy和RequiredBy选项后还需要执行`systemctl enable XXX`(当前服务模块,即被依赖模块)才能真正生效,以在对应依赖模块的/etc/systemd/system/xxx.wants或xxx.require/路径下生成当前模块的软链接。可以使用`systemctl disable XXX`来取消这种依赖,即对软链接进行删除。

例如,开机自启abc.service就可以通过在其service文件中配置:

WantedBy=multi-user.target

然后执行:

systemctl enable abc

来实现。

执行下述命令来取消开机自启:

systemctl disable abc

[Service]

常用选项配置:

选项

含义

Type

simple, exec, forking, oneshot, dbus, notify, idle 其一。

常用的有 simple(默认类型) 和 forking。默认的 simple 类型可以适应于绝大多数的场景,因此一般可以忽略这个参数的配置。而如果服务程序启动后会通过 fork 系统调用创建子进程,然后关闭应用程序本身进程的情况,则应该将 Type 的值设置为 forking,否则 systemd 将不会跟踪子进程的行为,而认为服务已经退出。

RemainAfterExit

当该服务的所有进程全部退出之后, 是否依然将此服务视为活动(active)状态, 默认值为 no。这个配置主要是提供给一些并非常驻内存,而是启动注册后立即退出然后等待消息按需启动的特殊类型服务使用

ExecStart

在启动该服务时需要执行的命令行(命令+参数),在每个配置文件中只能使用一次。

ExecStartPre, ExecStartPost

在执行 ExecStart= 之前/后执行的命令行。 语法规则与 ExecStart= 完全相同。 如果设置了多个命令行, 那么这些命令行将以其在单元文件中出现的顺序 依次执行。

注意:不可将 `ExecStartPre=` 用于需要长时间执行的进程。 因为所有由 `ExecStartPre=` 派生的子进程都会在启动 `ExecStart=` 服务进程之前被杀死。

ExecReload

用于设置当该服务被要求重启时所执行的命令行。 语法规则与 ExecStart= 完全相同。

ExecStop

用于设置当该服务被要求停止时所执行的命令行。与 ExecStop= 不同,无论服务是否启动成功, 此选项中设置的命令都会在服务停止后被无条件的执行。

ExecStopPost

设置在该服务停止之后所执行的命令行。 语法规则与 `ExecStart=` 完全相同。

Restart

no, on-success, on-failure, on-abnormal, on-watchdog, on-abort, always 其一。

当服务进程 正常退出、异常退出、被杀死、超时的时候, 是否重新启动该服务。 所谓"服务进程" 是指 ExecStart=, ExecStartPre=, ExecStartPost=, ExecStop=, ExecStopPost=, ExecReload= 中设置的进程。 当进程是由于 systemd 的正常操作(例如 systemctl stop|restart)而被停止时, 该服务不会被重新启动。

常用的是on, on-failure。

RestartSec

服务被重启前的等待秒数。默认值为100ms,不指定时间单位时默认以秒为单位。

TimeoutStartSec

该服务允许的最大启动时长。若超时未发出"启动成功"的信号则被视为启动失败,默认以秒为单位。

TimeoutStopSec

(1)  设置每个 ExecStop= 的超时时长。如果其中之一超时, 那么所有后继的 ExecStop= 都会被取消,并且该服务也会被 SIGTERM 信号强制关闭。 如果该服务没有设置 ExecStop= ,那么该服务将会立即被 SIGTERM 信号强制关闭。 

(2)  (2)设置该服务自身停止的超时时长。如果超时,那么该服务将会立即被 SIGTERM 信号强制关闭

默认以秒为单位。

TimeoutSec

同时设置 TimeoutStartSec= 与 TimeoutStopSec=

Environment

为服务添加环境变量,接受一个空格分隔的``VAR=VALUE`列表,可以多次使用此变量,同一个变量以最后一次设置为准。设为空表示清空先前所有已设置的变量。

注意:

(1)  不会在字符串内部进行变量展开(也就是"$"没有特殊含义);

(2)   如果值中包含空格或者等号,那么必须在字符串两边使用双引号(")界定。

EnvironmentFile

从文本文件中读取环境变量的设置。在路径前加上 "-" 前缀表示忽略不存在的文件。

User, Group

设置进程在执行时使用的用户与组。该设置会影响服务对本地文件系统的访问权限。

WorkingDirectory

进程的工作目录。当 systemd 作为系统实例运行时,此选项的默认值是 `/` ; 当 systemd 作为用户实例运行时,此选项的默认值是对应用户的家目录。给目录加上 "-" 前缀,那么表示即使此目录不存在,也不算致命错误。

Nice

服务的进程优先级,值越小优先级越高,默认为0。-20为最高优先级,19为最低优先级。

LimitCPU / LimitSTACK / LimitNOFILE / LimitNPROC 等

限制特定服务可用的系统资源量,例如 CPU,程序堆栈,文件句柄数量,子进程数量… 

Restart= 的设置分别对应于哪些退出原因:

退出原因(↓)

Restart= (→)

no

always

on-

success

on-

failure

on-

abnormal

on-

abort

on-

watchdog

正常退出

 

X

X

       

退出码不为"0"

 

X

 

X

     

进程被强制杀死

 

X

 

X

X

X

 

systemd 操作超时

 

X

 

X

X

   

看门狗超时

 

X

 

X

X

 

X

 

文章来自个人专栏
存储专栏
89 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0