使用系统组织服务/守护进程:运行100多个守护进程,按3分组

我是新来的systemd

我有一台机器需要运行大量的守护进程。 有三种types的守护进程,称它们为守护进程A守护进程B守护进程C。

这些守护进程总是运行在3个“组”中,具有这些3的特定configuration。

偶尔,有必要重新启动或停止整个组。

什么是解释这个systemd最好的方法?

我目前的知识将使我简单地为每个守护进程A守护进程B守护进程C ,为每个configuration创build一个新的.service文件。 我在cgroups和slice方面稍微有些失落,因为我有点理解他们做了什么,但是实际的用例还是略微超出了我的意思。

我需要能够以简单的方式检查一个特定的组。

这是要走的路吗? 拥有如此大量的systemd managed服务有什么问题吗?

systemd实际上有几个单元configuration选项 ,您可以使用它们来表示这些服务之间的依赖关系。

特别是你会想看看Requires=Before=After=BindsTo=PartOf= ,它们都指定了一个单位可以相对于其他单位开始或停止的不同方式。 还有其他几个不太常用的,所以仔细阅读文档,以防守护进程可以使用它们。

(因为你没有确切地说明你的服务之间的依赖关系,我不能推荐你应该使用哪个选项。)


此外,systemd可以具有实例化单元 ,它们启动相同的服务,但具有不同的configuration。 实例化单元的名称以@结尾,实例是@后面的名称。 在单元文件中, %I%i被replace为实例名称,您可以使用它来加载特定的configuration文件。 例如,在一个实例化的单元[email protected] ,可以指定:

 ExecStart=/usr/bin/foo --daemon --config=/etc/foo/%i.conf 

然后,要在bar实例中启用foo服务,你会说:

 systemctl enable foo@bar 

这将导致foo服务以/etc/foo/bar.conf开头。


还要注意,你也可以在需求中指定实例。 例如,如果[email protected]需要[email protected]具有相同的实例名称,则可以在[email protected]说:

 Requires=b@%i.service