systemd 作用域和 systemd 切片有什么区别?

systemd 作用域和 systemd 切片有什么区别?

systemd 作用域和 systemd 切片有什么区别?

两者都是为了资源管理。但是仅使用切片可以做什么以及仅使用范围可以做什么?

答案1

  • 服务是一种单元类型,指示 systemd 如何启动进程,如指定的系统执行程序。服务并不是从 systemd 生成进程的唯一机制,但它们的独特之处在于能够任意执行此操作,而无需绑定到设备或套接字。
  • 范围是一种单元,指示 systemd 如何对非自身启动的进程进行分组。

正如您所看到的,服务和范围都是对流程进行分组的基元。值得注意的几个差异是:

  • 范围不是由单元文件声明的,而是使用以下方式以编程方式创建的:systemd 的 dbus API
  • 服务有一个主进程的概念,服务的生命周期就是该进程的生命周期。对于作用域,单元的生命周期与“作用域中至少存在一个进程”相关。

现在介绍第三种单位类型:

  • 切片是一种对服务、范围和其他切片进行分组的单元。
    • 为什么不使用范围呢?因为作用域管理进程,而不是其他 systemd 单元。此外,范围不能用文件来声明,这是可取的。
    • 为什么不使用服务来代替呢?嗯,服务本身实际上能够封装作用域和切片(稍后我们将看到它的实用性),所以这不是答案。我的答案是,服务在语义上与正在执行的某些内容绑定在一起。使用切片可以将 systemd 单元分组在一起,而不必执行进程。

服务、作用域和切片是支持的三种 systemd 单元类型资源控制。这包括 systemd 与 Linux 内核的接口cgroup API。这三个都很有用,并且所有三个都可以在任何默认的 systemd 系统上使用。举一些如何使用它们的例子:

  • 为了定期运行一个进程,或者为了响应 systemd 生态系统中某个地方的刺激,您需要使用一项服务 - 您可能对此很熟悉。
  • 当寻求控制多个服务的相对资源使用时,您可以使用切片,如本文所示。如果它只是一项服务,那么在该服务单元中配置资源限制就足够了。然而,对于那篇文章,切片是正确的,因为:
    • 对于这个层次结构的“父”——即将服务分组在一起的单元——没有什么可以执行的,所以父服务不适用(另外,我不确定 systemd 是否提供了一种方法来进行这种分组正规服务单位)。
    • 范围用于对不是由 systemd 产生的进程进行分组。在这里,我们能够使用服务单元生成进程。重申一下,如果您使用服务来生成进程,则范围无关紧要

要对系统进行更全面的了解:

  • systemd 进程本身位于根切片下的作用域下,因为它不能真正作为服务存在。
  • 从广义上讲,系统分为system.slice系统服务切片和user.slice用户切片,最终包含用户进程。
  • 当用户登录(例如通过图形会话、终端或 SSH)时,systemd-loginctl.service设置以下内容:
    • 模板[email protected]在用户的切片内实例化。该服务启动 systemd 用户实例。
    • 之内 [email protected]是一个session.slice为用户服务的。这是服务的一种情况用于对其他单元进行分组,这是可能的,因为它启动一个进程,同时仍然对其下面的其他单元进行分组是合乎逻辑的。

答案2

它看起来有点像资源管理树中的文件和目录:

  • 服务、切片和范围代表目录
  • 进程(带有 PID 的事物)代表文件
  • 切片不能包含文件,只能包含其他目录
    • 即切片不直接启动进程,它们下面有切片、范围或服务
  • 服务和范围只能位于“切片目录”下,不能位于“服务或范围目录”下
    • 因此,目录树的形状仅由切片决定

链接:

相关内容