Naf*_*Kay 20 systemd supervisord
在我的组织中,我们有许多队列消耗工作进程。我们目前正在使用 SupervisorD 来管理它们,但如果可能的话,希望使用 SystemD 来获得某些优势。我在编写自定义单元方面颇有经验,但我并没有立即在 SystemD 领域中为此提供模拟。
在SupervisorD 文档numprocs中,详细介绍了一个名为的参数,它允许人们设置他们希望通过服务启动的进程数。如果我想要启动 30 个进程,这是一行更改。
SystemD 单元中是否有允许我指定要启动多少个这些进程的设置?
phe*_*mer 33
Munir 提到的正是你如何做到这一点。基本上你创建一个service文件,并启动它 30 次。现在这可能看起来有点笨拙,但它具有优势,例如可以在行为不端时关闭其中一个,而不必关闭所有这些。您还可以做一些事情来简化管理。
首先是单元文件。创建一个文件,例如/etc/systemd/system/test@.service. 重要的一点是@符号。
它的内容可能如下所示:
[Service]
ExecStart=/bin/sleep 600 %I
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
然后以systemctl start test@1.service,开头systemctl start test@2.service。
启动的进程将如下所示:
root 17222 19 0 0.0 0.0 Ss 00:05 /bin/sleep 600 1
root 17233 19 0 0.0 0.0 Ss 00:02 /bin/sleep 600 2
Run Code Online (Sandbox Code Playgroud)
请注意,the %Igot 替换为您在@启动它后放置的任何内容。
你可以用一点 shell-fu 开始所有 30 个:
systemctl start test@{1..30}.service
Run Code Online (Sandbox Code Playgroud)
您还可以像任何普通服务一样在启动时启用它们:systemctl enable test@1.service.
现在,我所说的使管理更容易的事情是什么意思:也许您不想使用test@{1..30}.service来管理所有这些事情。它有点笨拙。您可以改为为您的服务创建一个新目标。
创建/etc/systemd/system/test.target:
[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)
然后调整/etc/systemd/system/test@.service它,使其看起来像:
[Unit]
StopWhenUnneeded=true
[Service]
ExecStart=/bin/sleep 600 %I
[Install]
WantedBy=test.target
Run Code Online (Sandbox Code Playgroud)
重新加载 systemd systemctl daemon-reload(仅当您正在修改单元文件时才需要,并且没有跳过它的早期版本)。现在启用您想要管理的所有服务systemctl enable test@{1..30}.service。
(如果您之前已启用该服务WantedBy=multi-user.target,请先禁用它以清除依赖项)
您现在可以执行systemctl start test.targetand systemctl stop test.target,它将启动/停止所有 30 个进程。
同样,您可以像任何其他单元文件一样在启动时启用:systemctl enable test.target.
| 归档时间: |
|
| 查看次数: |
10764 次 |
| 最近记录: |