了解 Systemd 单位和单位文件

介绍

越来越多的Linux发行版采用了systemd init系统,这种强大的软件套件可以管理您的服务器的许多方面,从服务到安装的设备和系统状态。

systemd中,单位是指系统知道如何操作和管理的任何资源,这是systemd工具知道如何处理的主要对象。

在本指南中,我们将向您介绍systemd可以处理的不同单元,我们还将涵盖一些可以用于单元文件的许多指令,以塑造这些资源在您的系统上处理的方式。

Systemd Unit 能为您提供什么?

单位是systemd知道如何管理的对象,这些对象基本上是系统资源的标准化表示,这些资源可以由 daemon 套件管理并由提供的实用程序操纵。

单元可以说是类似于其他 init 系统中的服务或工作,但是,单元具有更广泛的定义,因为这些可以用于抽象服务,网络资源,设备,文件系统安装和孤立的资源池。

在其他 init 系统中可以用一个统一的服务定义来处理的想法可以根据其焦点分成组件单元,这按函数进行组织,允许您轻松启用、禁用或扩展功能,而不会改变单元的核心行为。

一些单元能够轻松实现的功能是:

*口袋活化: 与某项服务相关的Sockets最好从守护进程本身中分出,以便分别处理. 这提供了一些优点,例如推迟服务启动,直到相关套接字首次被访问. 这也允许系统在启动过程早期创建出所有套接字,从而可以并行启动相关服务.

  • ** 基于公共汽车的活化**: 单位也可以在由"D-Bus"提供的总线界面上被激活. 当关联总线发布时可以启动一个单位.
  • ** 路径活化**: 一个单元可以根据某些文件系统路径的活动或可用性开始. 使用 " 激发 "
  • 基于设备的活化: 单位也可以通过利用 " udev " 活动,在初次获得相关硬件时开始。 (_) ( )* ** 隐含依赖图**: 单元的依赖树大多可以由 " systemed " 本身来建造。 您仍然可以添加依赖和订购信息, 但大部分的起重量会照顾您 。
  • ** 文件和模板**: 模板单位文件可用于创建多例相同的普通单位. 这允许微小的变异或兄弟姐妹单位,它们都提供相同的一般函数.
    • 安全性较强**: 各单位可以通过增加简单的指令来实施一些相当良好的安全特征. 例如,您可以指定不访问或只读访问文件系统的一部分,限制内核能力,并指定私有的"/tmp"和网络访问.
  • ** 滴入和片断**: 单位可以通过提供片段来方便地被扩展,片段将覆盖系统单位文件中的部分. 这使得香草与定制单元执行之间的切换变得容易. (单位:千美元) (英语)

与其他 init 系统的工作项目相比,systemd单元具有许多其他优点,但这应该让您了解使用本地配置指令可利用的功率。

Systemd Unit 文件在哪里找到?

定义systemd如何处理单元的文件可以在许多不同的位置找到,每个位置都有不同的优先级和影响。

系统的单元文件副本通常保存在 /lib/systemd/system 目录中. 当软件在系统上安装单元文件时,这是它们默认放置的位置。

存储在这里的单元文件可以在一个会话期间按要求启动和停止。这将是通用,瓦尼拉单元文件,通常由上游项目的维护者撰写,该文件应该在任何部署systemd在其标准实现的系统上工作。您不应该在这个目录中编辑文件。相反,您应该在必要时使用另一个单元文件位置来替代该文件。

如果你想修改一个单元的运作方式,那么最好的位置是在 /etc/systemd/system 目录中。在这个目录位置中发现的单元文件优先于文件系统上的任何其他位置。

如果您想从系统的单元文件中仅排除特定指令,您实际上可以在子目录中提供单元文件片段,这些将附加或修改系统副本的指令,允许您只指定您想要更改的选项。

正确的方法是创建一个名为单元文件的目录,其末尾附有.d。因此,对于一个名为example.service的单元,可以创建一个名为example.service.d的子目录。

该目录中发现的单元文件在/etc/systemd/system/lib/systemd/system中的单元之间有一个优先登陆位置。

systemd过程本身使用此位置动态创建在运行时创建的单元文件. 此目录可用于在会话期间改变系统的单元行为. 在重新启动服务器时,在该目录中所做的所有更改都会丢失。

单位类型

「Systemd」按其所描述的资源类型分类单位。确定单位类型最简单的方法是使用其类型附加符号,该符号附加到资源名称的末尾。

  • 服务: 一个服务单位描述了如何在服务器上管理一个服务或应用程序. 这将包括如何启动或停止服务,在何种情况下应自动启动服务,以及相关软件的依赖和订购信息。 () ( )* - 萨克特: 套接字单元文件描述一个网络或IPC套接字,或一个FIFO缓冲器,用于基于套接字的活化。 这些文件总是有一个相联的 ".service " 文件,将在看到该单位定义的套接字上的活动时开始。 ( ( )* .device:一个单位描述一个被指定需要由udev'或sysfs'文件系统系统化'管理的设备。 并非所有设备都有.device'文件。 可能需要.device ' 单元的某些情况是,订购、安装和取用设备。 (_) ) * * *.mount *: 这个单位在系统上定义了由系统化管理的挂起点。 这些以挂载路径命名,被划去后被改为了破折. /etc/fstab'内的条目可以自动创建单位。 () ) * .automa: .自升'单元配置自动挂载的挂载点。 这些必须用它们提到的挂起点命名,必须有一个相匹配的.mount'单位来定义挂起点的具体内容。 () ( )* 说吧, 此单元描述系统上的交换空间 。 这些单位的名称必须反映空格的设备或文件路径. (_ 目标: 目标单位用于在启动或改变状态时为其他单位提供同步点. 它们也可以被用来将系统带入一个新的状态. 其他单位指定与目标的关系,以与目标操作挂钩. (_ ( )* 说吧, 此单位定义了可用于基于路径活化的路径. 默认情况下,当路径到达指定状态时,将启动同一基名的 ".服务 " 单位。 这使用 " 点出 " 来监测变化的路径。
    • .timr:一个.timr' 单位定义了一个由systemd'管理的时间器,类似于延迟或预定启动的 " cron " 工作。 到达定时器后将启动匹配单位。
  • .snapshot:由"系统快照"命令自动创建出".snapshot"单元. 它允许您在进行修改后重建系统当前状态. 截图无法在会话中存活下来,并被用于回滚临时状态. (_ ( )* .slice:一个".slice"单元与Linux Control Group节点相关联,允许将资源限制或分配给与切片相关的任何进程. 名称反映了其在"群"树中的分级地位. 单位默认会根据其类型放在某些切片中( _) ( )* .scope:范围单位由从总线接口得到的信息"系统"自动创建. 这些用于管理外部创建的系统流程( -- (英语)

正如你所看到的,有许多不同的单元systemd知道如何管理。许多单元类型一起工作,以增加功能。

我们将主要专注于服务单元,因为它们的实用性和管理员需要管理这些单元的一致性。

单元文件的解剖学

单元文件的内部结构由部分组成,部分由一对方块[和``]`表示,其中包含了部分名称,每个部分延伸到下一个部分的开始或文件的结束。

单元文件的特点

部分名称有明确的定义和案例敏感性,因此,如果它写作为[UNIT],则[Unit]部分将不会被正确地解释。

在这些部分中,单位行为和元数据通过使用简单的指令来定义,使用一个键值格式,以一个等级符号表示分配,如下:

1[Section]
2Directive1=value
3Directive2=value
4
5. . .

在过排文件的情况下(如包含在 unit.type.d 目录中的文件),可以通过将其分配到一个空串来重新设置指令,例如,系统对单元文件的副本可能包含一个指令设置为这样的值:

1Directive1=default_value

default_value可以通过引用Directive1而没有一个值来消除在一个过排文件中,如下:

1Directive1=

一般而言,systemd允许轻松灵活的配置,例如,可以接受多个布尔式表达式(1,,,为肯定和0,为相反的答案)。

(一)部份指令

大多数单元文件中发现的第一个部分是[单元]部分,通常用于定义单元的元数据并配置单元与其他单元的关系。

虽然部分的顺序在解析文件时并不重要,但这个部分通常被放置在顶部,因为它提供了单位的概述。

  • 描述: 此指令可用于描述单位的名称和基本功能. 它通过各种 " 有系统 " 的工具返回,因此将它设定为简短、具体和内容丰富的工具是好的。 () ( )* 校对:Soup 该指令为用于文档的URI列表提供了一个位置. 这些网站可以是内部提供的 " 人 " 网页,也可以是网络无障碍的URL。 " 系统状态 " 命令将披露这些信息,便于发现。 () ( )* 请求: 本指令列出了该单位基本依赖的任何单位. 如果当前单位被激活,这里列出的单位也必须成功激活,否则这个单位将失败. 这些单位默认与当前单位平行启动 。
  • 赞美。 这一指令类似于要求',但不太严格。 系统 ' 将试图在启用此处所列任何单位时启动该单位。 如果找不到这些单位或未能启动,则目前的单位将继续运作. 这是大多数依赖关系配置的推荐方式. 这再次意味着,除非其他指令修改,否则将同时启动。 () ( )* 宾斯 切换: 此指令与"要求"相类似,但也导致当前单位在关联单位终止时停止. ( ( )* 之前: 本指令所列出的单位,如果同时被激活,则不会启动,直到当前单位被标记为已启动. 这并不意味着依赖关系,如果需要,必须与上述指令之一一并使用。
  • ++++:本指令所列出的单位将在当前单位开始前开始. 这并不意味着依赖关系,如果需要,必须通过上述指令确定这种关系。 (_) ( )* 冲突: 这可以用于列出无法与当前单位同时运行的单位. 启动此关系单位会导致其他单位被停止 。
  • 条件... 有一些指令从 " 条件 " 开始,允许管理人在启动单位之前测试某些条件。 这可以用来提供一个通用的单元文件,只有在适当的系统中运行。 如果不符合条件,则该单位被优雅地跳过。
  • 萨斯特... 与从 " 条件 " 开始的指令类似,这些指令检查运行环境的不同方面,以决定该单位是否应启动。 然而,与 " 条件 " 指令不同,负面结果导致该指令失败。 (_) (英语)

使用这些指令和少数其他指令,可以建立有关单元及其与其他单元和操作系统的关系的通用信息。

【下篇】《指南》

在单元文件的对面,最后一个部分通常是[安装]部分。这个部分是可选的,并且用于定义行为或单元,如果它被启用或禁用。允许单元标记它在启动时自动启动。

由于这个原因,只有可以启用的单元将有这个部分. 内部的指令决定当该单元启用时应该发生什么:

  • 温特比: WantedBy='指令是规定单位应如何启用的最常见方式。 该指令允许您以与[单位]'部分中的Wants='指令相似的方式指定依赖关系。 不同之处在于,该指令包含在辅助单元中,允许列出的主要单元保持相对清洁. 在启用带有该指令的单位时,将在以指定单位命名的/etc/ systemd/ system'内创建一个目录,并附有.wants'。 在此范围内,将建立与当前单位的象征性联系,从而形成依赖关系. 例如,如果目前的单位有WantedBy=多用户.object',则在/etc/systemd/ system'(如果还没有)范围内建立一个称为多用户.object.wants'的目录,并与目前的单位建立象征性的联系。 禁用此单位可删除链接并删除依赖关系 。 (_) ( )* 须 作者: 这一指令与WantedBy='指令非常相类似,但具体指明了必要的依赖性,如果未满足,激活将失败。 启用时, 带有此指令的单位将创建以 `. requires'.
  • 为结尾的目录 阿利亚斯: 这个指令也允许单位以另一个名称被启用. 除其他用途外,这允许一个函数的多个提供者可用,这样相关的单位就可以寻找任何通用别名的提供者. () ( )* 说吧, 此指令允许单位作为集合被启用或禁用 。 在此可列出该单位活动时应始终可用的辅助单位。 它们将作为一个组管理,以完成安装任务。 () ( )* 校对:Soup 对于可以产生有不可预知名称的单位实例的模板单元(后被覆盖),如果不提供合适的名称,这可以作为名称的倒置值. (单位:千美元) (英语)

单元专项指令

在前两节之间,你可能会发现单元类型特定的单元类型。大多数单元类型提供只适用于它们特定的类型的指令。

设备目标快照范围单元类型没有单元特定的指令,因此对其类型没有相关的部分。

《服务部》

用于提供仅适用于服务的配置的[服务]部分。

[服务]部分中应该指定的基本事项之一是服务的类型=。这将服务分类为其流程和恶魔化行为。这很重要,因为它告诉系统如何正确管理服务并了解其状态。

Type=指令可以是以下之一:

*simple:服务的主要过程由起动线指定. 如果不设定Type='和Busname='指令,而是设定ExecStart=',则默认为默认。 任何通讯应在单位外通过适当类型的第二个单位处理(如通过.socket'单位,如果该单位必须使用套接字进行通讯)。 (_) ( )* **forking**:当服务叉出一个孩子的过程时,这种服务类型被使用,几乎立即退出了父进程. 这告诉系统化进程仍在运行,即使父程序退出。 (_) ( )* ** 1发**:这一类型表明,这一进程将持续很短, " 系统化 " 应等该进程退出后再继续与其他单位合作。 这是默认的 Type ExecStart 未设置 。 它用于一次性任务。 (_ ( )* **dbus**:这表示单位将在D-Bus总线上取名. 当这种情况发生时,系统'将继续处理下一个单元。

  • ** 通知**:这表明,服务处将在它结束工作时发出通知。 " 系统化 " 进程将等待这种情况的发生,然后进入其他单位。 (_) ( )* idle:这表明,在所有工作完成之前,服务不会运行。 (单位:千美元) (英语)

使用某些类型的服务时可能需要一些额外的指令,例如:

  • RemainAfterExit=:本指令通常用来与 oneshot类型一起使用。它表示该服务即使在进程退出后也应该被认为是活跃的
  • PIDFile=:如果服务类型被标记为forking,则本指令用于设置该文件的路径,该文件应该包含应监控的主要子女的进程ID号
  • BusName=:本指令应设置为服务在使用dbus服务时将试图获得的D-Bus公交名称。

到目前为止,我们已经讨论了一些先决条件的信息,但我们还没有真正定义如何管理我们的服务。

  • ExecStart {}: 此选项指定了启动进程要执行的命令的全部路径和参数 。 这只能指定一次("一发"服务除外). 如果命令的路径前有"-"字符,则将接受非零退出状态,而不将单位激活标记为失败. () ( )* 执行开始 这可以用来提供额外的命令,在主进程启动前应当执行. 这可以多次使用. 同样,命令必须指定一条完整的路径,并且可以在-之前表示命令的失败将被容忍。 () ( )* 执行开始 这与 ExecStartPre= ` 具有相同的准确性, 但它指定了将运行的命令_ after_ 主进程启动 。
  • 执行重载 : 此可选指令表示在可用的情况下重新装入服务配置所需的命令. (_) ( )* 暂停 : 这表明停止服务所需的命令. 如果未给出此选项, 当服务停止时, 进程会立即被终止 。
  • #QQExecStop Post ## ## : ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## ## 这可用于指定在停止命令后执行的命令 。
  • 重新启动Sec: 如果启用自动重新启动服务, 则指定了在尝试重新启动服务之前等待的时间 。 (_) ( )* 重新开始 : 这表明了`系统化 ' 试图自动重新启动服务的情况。 这可以设定为"永远","在成功","在失败","在异常","在破坏",或"在监视"等价值观. 这将根据服务停止的方式触发重新启动 。
  • 时间间隔 : 这将配置系统化在停止或停止服务时等待的时间,然后将其标记为失败或被强行杀死。 您可以另设置TimeoutStartSecTimeoutStopSec 的超时档 。 ( _) (英语)

插槽单元在systemd配置中非常常见,因为许多服务实施了基于插槽的激活,以提供更好的并行性和灵活性。

通过打破服务本身以外的接口控制,接口可以提前初始化,并经常可以并行启动相关服务. 默认情况下,接口名称将在接到连接时尝试启动相同名称的服务。

为了指定实际接口,这些指令是常见的:

  • ListenStream=:这定义了支持连续、可靠通信的流接口的地址。使用TCP的服务应该使用此接口类型
  • ListenDatagram=:这定义了支持快速、不可靠通信包的数据图接口的地址。使用UDP的服务应该设置此接口类型
  • ListenSequentialPacket=:这定义了与最大长度的数据图保持消息边界的连续、可靠通信的地址。

有更多类型的倾听指令,但上述指令是最常见的。

插头的其他特性可以通过额外的指令来控制:

如果设置为假(默认),一个实例将处理所有连接

  • SocketUser=:使用Unix插件,指定插件的所有者。这将是根用户,如果不设定
  • SocketGroup=:使用Unix插件,指定插件的组所有者。如果没有设定此或上述内容,这将是根组。如果设定只有 SocketUser=,那么,系统将试图找到匹配的组
  • SocketMode=:对于Unix插件或 FIFO缓冲器,这将设置创建实体的权限。

(一)山区

山区单位允许从systemd内部进行山区管理,山区点以其所控制的目录命名,并应用翻译算法。

例如,领先的缩略被删除,所有其他缩略被翻译成缩略-,所有缩略和不可打印的字符被替换为C风格的逃避代码。 这种翻译的结果被用作安装单位名称。

Mount 单元通常在启动过程中直接从 /etc/fstab 文件中翻译。对于自动创建的单元定义和您希望在单元文件中定义的单元定义,以下指令是有用的:

  • What=:需要安装的资源的绝对路径
  • Where=:该资源应该安装的安装点的绝对路径 这应该与单元文件名称相同,除非使用常规文件系统标注
  • Type=:安装系统的文件类型
  • Options=: 需要应用的任何安装选项. 这是一个单元列表
  • SloppyOptions=:确定安装系统是否会失败如果有未识别的安装选项
  • Directory=:如果需要为安装点创建的母目录,则将确定这些管理器的允许模式(

(一)汽车部

该单元允许在启动时自动安装相关的 .mount 单元,与 .mount 单元一样,这些单元必须以翻译的 mount point 的路径命名。

「[自動車]」部分相當簡單,只允許下列兩個選項:

  • Where=: 文件系统上的自动点的绝对路径. 这将匹配文件名,除非它使用传统的路径标注而不是翻译.
  • DirectoryMode=:如果需要创建自动点或任何家长目录,这将决定这些路径组件的权限设置。

《SWAP》部分

交换单元用于配置系统上的交换空间. 该单元必须以交换文件或交换设备命名,使用上文讨论的相同的文件系统翻译。

与安装选项一样,交换单元可以从/etc/fstab条目中自动创建,也可以通过专用单元文件进行配置。

单元文件的[Swap]部分可以包含以下配置指令:

  • What=: 交换空间的位置的绝对路径,无论是文件还是设备
  • Priority=:这需要一个指示配置交换的优先级的整数
  • Options=: 通常在 /etc/fstab 文件中设置的任何选项可以用此指令设置。

《路》一节

路径单位定义了一个系统可以监控变化的文件系统路径,另一个路径单位必须存在,当在路径位置检测到某些活动时会被激活。

单元文件的[Path]部分可以包含以下指令:

  • 爱国者: 此指令用于检查相关路径是否存在 。 如果有,则相关单位被激活.
  • 博客: 这与上述相同,但支持用于确定路径存在的文件 glob 表达式 。 (_) ( )* 校对:Soup 此查看路径位置进行更改 。 如果在被监视文件关闭时检测到变化, 关联单位将被激活 。
  • 校对:Soup 此监视像上述指令那样的更改, 但是它在文件写入以及文件关闭时都会激活 。
  • {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 此指令允许 systemd 在目录不再是空时激活关联单位 。 (_) ( )* 单位: 此选项指定在符合上述路径条件时启动的单位 。 如果省略, systemd将寻找一个与这个单位共用同个基单位名称的.service文件。
  • 做导演: 这决定了 systemd 是否会在观看前创建相关路径的目录结构 。
  • 翻译: 如果启用了以上内容, 这将设置必须创建的任何路径组件的许可模式 。 (单位:千美元) (英语)

《时光》一节

计时器单位用于计划任务在特定时间或某些延迟后运行。此类型单位取代或补充了一些cronat DAEMON的功能。

单元文件的(Timer)部分可能包含以下一些指令:

{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 此指令允许关联单位相对于".timer"单元活化被激活.

  • 在BootSec上: 此指令用于指定系统启动后启动关联单元的时间量 。
  • 由我决定, 此指令与上述定时器类似,但与何时启动`系统'进程本身有关。
  • 团结中: 此选项根据关联单位上次激活时设置了计时器 。 () ( )* 在UnitedInactiveSec上: 此设置与关联单位上次被标记为不活动时有关的计时器 。 () ( )* 说: 这使得您可以通过指定一个绝对而非相对事件来激活关联单位. (_) ( )* 准确性: 此单位用于设定计时器应当遵守的精确度. 默认情况下,相关单位将在到达定时器后一分钟内被激活. 此指令的值将决定 systemd 将启动的窗口上的上限 。
  • 单位: 此指令用于指定计时器起落时应当激活的单位 。 如果未确定,系统化'将寻找.服务' 带有匹配此单位的名称的单位 。
  • 时间轴: 如果设置了此选项, systemd 将在计时器活动时触发关联单位, 如果该单位在计时器不活动期间被触发的话 。 ( ) ( )* 校对:Soup 设置此指令允许您在计时器到达时提醒系统停止暂停 。 () (英语)

此分類上一篇:

单元文件的[Slice]部分实际上没有任何.slice单元特定的配置,相反,它可以包含一些资源管理指令,这些指令实际上可用于上述某些单元。

[Slice]部分中的一些常见指令,也可用于其他单位,可以在systemd.resource-control人的页面中找到。

  • [Slice]
  • [Scope]
  • [Service]
  • [Socket]
  • [Mount]
  • [Swap]

从 Template Unit 文件中创建实例单元

在本指南之前,我们提到了模板单元文件用于创建多个单元实例的想法,在本节中,我们可以更详细地讨论这个概念。

模板单元文件在大多数情况下与常规单元文件没有区别,然而,这些文件提供了配置单元的灵活性,允许文件的某些部分利用在运行时可用的动态信息。

模板和实例单位名称

模板单元文件可以识别,因为它们在基元单元名称后和单元类型补丁前包含一个 @ 符号。

当从模板创建实例时,将一个实例标识符放在@符号和指示单位类型的开始的期限之间,例如,上面的模板单元文件可以用来创建一个实例单元,它看起来像这样:

一个实例文件通常被创建为对模板文件的符号链接,链接名称包括实例标识符。以这种方式,具有独特标识符的多个链接可以指向单个模板文件。当管理一个实例单位时,‘systemd’会搜索您在命令行中指定的确切实例名称的文件。

寺庙特征

模板单元文件的功率主要是通过其能够根据操作环境动态地替代单位定义中的相应信息来观察到的,这是通过将模板文件中的指令设置为正常,但用变量规格取代某些值或值部分。

以下是当一个实例单元被解读与相关信息时更常见的规格的一些:

  • 联合国 时间轴: 模板文件中显示此内容的任何地方,将插入全部产生的单位名称。
  • 说吧 这与上述情况相同,但任何逃逸,如文件路径模式中的逃逸,都将被倒置. (_ ( )* **%: 此引用单位名称前缀 。 这是在QQ符号前出现的单位名称的一部分. (_) ( )* **%: 这与上述情况相同,但任何逃出都会逆转。
  • 校对:Soup 这引用了实例名称, 它就是实例单位中QQ之后的标识符 。 这是最常用的规格之一,因为它会被保证是活性的. 使用此标识符会鼓励使用配置上的重要标识符. 例如,服务运行在的端口可以用作实例标识符,而模板可以使用这个指定符来设置端口规格. (_ ( )* 说吧 此描述符与上述相同,但任何逃逸都倒转. (_ ( )* 校对:Soup 将替换为未脱逃实例名称或前缀名称,预设为 `/'
  • 说得好, 这将显示单元的控制组,删除/sys/fs/cgroup/ssytemd/'的标准母等级。 (_) ( )* 校对:Soup 配置用于运行该单位的用户名称( _) * **%: 与上文相同,但作为数字`UID'而不是名称。 (_) ( )* {\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}你觉得呢? 运行单元的系统主机名
  • %%: 用于插入一个字形百分比符号( _) (英语)

通过在模板文件中使用上述标识符,‘systemd’在解释模板以创建实例单元时会填写正确的值。

结论

在使用systemd时,理解单元和单元文件可以简化管理。与许多其他 init 系统不同,您不需要知道脚本语言来解释用于启动服务或系统的 init 文件。

将激活逻辑等功能分成单独单元,不仅允许内部的systemd流程优化并行初始化,还使配置相对简单,并允许您修改和重新启动一些单元,而不破坏和重建相关连接。

Published At
Categories with 技术
comments powered by Disqus