如何管理需要多个进程的 systemd 服务?

如何管理需要多个进程的 systemd 服务?

我有一个网站,需要运行多个进程(python、node 等)。我目前已创建 systemd 服务,因此我可以轻松启动和停止这些进程。我创建了一个启动脚本,它将我需要的所有进程作为后台进程启动(附加&到命令末尾)。

由于所有进程都在单个脚本下启动,因此当出现崩溃时,我无法使用 systemd 的自动重启功能。

我能想到的一个潜在解决方案是为每个流程创建一个服务,然后通过创建一个主服务将它们链接在一起Requires。我不喜欢这个,因为这意味着我需要为我想运行的这个网站的每个环境创建 4-5 个服务。

有没有一种方法可以轻松定义一个启动多个进程并分别监视每个进程的服务?

答案1

创建多个模板服务,其名称如下@

使用模板,您可以为每个网站启动一个命名实例:

systemctl start [email protected] [email protected]
systemctl start [email protected] [email protected]

在这样的模板单元中,您可以使用%i来引用实例名称(本例中为“clientone”)。因此,“主”单元(服务或目标)可以具有:

[Unit]
Requires=pythonthingy@%i.service
...
[Service]
Environment="DOCROOT=/var/www/%i"

如果每个站点需要多个参数,则可以从文件中加载它们:

[Service]
EnvironmentFile=/etc/someconfigdir/%i.conf

如果某些站点与其他站点相比需要非标准单位设置,请使用插件:

模板、插件和扩展(如 %i)的解释见systemd.unit(5)

相关内容