我是新来的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