我正在使用一个外部服务,该服务创建自己的 systemd 范围,例如system.slice/someapp.slice/instance-400.scope
或user.slice/user-1000.slice/app-1234.scope
。
范围名称嵌入了 pid,因此它们是动态的。Id
和Name
都与单元名称完全匹配。
systemd 是否提供了任何方法来编写.scope
单元文件,该文件将[Scope]
通过名称模式匹配将属性应用于范围的所有实例,或者这是否只能在启动应用程序的配合下才能完成?
答案1
插入文件似乎允许这种覆盖。请参阅man systemd.unit
或本文档,如下所述。我认为允许插件应用而忽略动态部分(PID)的关键功能是:
此外,对于包含破折号(“-”)的单元名称,还会搜索通过重复截断所有破折号后的单元名称而生成的目录集。具体来说,对于单元名称 foo-bar-baz.service,不仅会搜索常规插入目录 foo-bar-baz.service.d/,还会搜索 foo-bar-.service.d/ 和 foo-.service.d/。这对于为名称以通用前缀开头的一组相关单元定义通用插入目录非常有用。
我能够使用以下命令为用户切片创建这样的覆盖(请注意最后一个破折号后缺少 PID):
~$ systemctl --user edit --force app-.scope
打开文件编辑器,您可以在其中添加其他选项。例如:
[Scope]
OptionOne=value
OptionTwo=value
您可以使用以下方法确认插件的存在:
~$ systemctl --user status app-1234.scope
[...]
Drop-In: /home/foo/.config/systemd/user/app-.scope.d
└─override.conf
[...]
对于系统切片,方法可能类似,除了--user
传递给的标志之外systemctl
。