我是新手systemd
。
我有一台机器需要运行大量守护进程。有三种类型的守护进程,分别称为守护进程-A,守护进程-B,守护进程-C。
这些守护进程总是以 3 个“组”的形式运行,并针对这 3 个进程采用特定的配置。
有时,可能需要重新启动或停止整个组。
向 解释这一点的最好方法是什么systemd
?
我目前的知识可以让我简单地.service
为每个创建一个新文件守护进程-A,守护进程-B,守护进程-C,适用于每种配置。当谈到 cgroups 和切片时,我有点迷茫,因为我大概了解它们的作用,但实际用例仍然有点超出我的理解范围。
我需要能够以一种简单的方式检查特定组。
这样做对吗?拥有如此多的systemd
托管服务有什么问题吗?
答案1
systemd 实际上有多个单元配置选项您可以使用它来表达这些服务之间的依赖关系。
特别是,您需要查看Requires=
、、和,它们都指定了启动或停止一个单元相对于其他单元的不同方式。还有其他几个不太常用的,因此请仔细阅读文档,以防您的守护进程可以使用Before=
它们。After=
BindsTo=
PartOf=
(因为您没有确切说明您的服务之间的依赖关系,所以我无法建议您应该使用哪个选项。)
此外,systemd 还可以实例单元,它们启动相同的服务,但配置不同。实例化单元的名称以 结尾@
,实例是 后面的名称@
。在单元文件中,%I
和%i
被替换为实例名称,您可以使用该名称来加载特定的配置文件。例如,在实例化单元 中[email protected]
,您可以指定:
ExecStart=/usr/bin/foo --daemon --config=/etc/foo/%i.conf
然后,要在实例中启用该foo
服务bar
,您可以说:
systemctl enable foo@bar
这将导致 foo 服务以 /etc/foo/bar.conf 启动。
还请注意,您也可以在需求中指定实例。例如,如果[email protected]
需要[email protected]
相同的实例名称,您可以这样说[email protected]
:
Requires=b@%i.service