带多个execStart的Systemd

我想知道是否可以使用以不同输入参数开头的相同脚本创建服务。如:

[Unit]

Description=script description

[Service]

Type=simple

ExecStart=/script.py parameters1

ExecStart=/script.py parameters2

Restart=on-failure

[Install]

WantedBy=multi-user.target

可能吗?那么它将启动为串行模式吗?还是分成两个不同的过程?最好的祝福

回答:

如果Type=simple在你的单位的文件,你只能指定一个ExecStart,但您可以添加尽可能多的ExecStartPreExecStartPost但这些都不是适合长期运行的命令,因为它们是串行执行,一切都开始一个开始下一个杀害前。

如果Type=oneshot可以指定多个ExecStart,则它们将以串行方式而不是并行运行。

如果要并行运行多个单元,则可以执行以下操作:

如果它们在1个参数上不同

您可以使用模板单元,因此可以创建一个/etc/systemd/system/foo@.service。 这@一点很重要)。

[Unit]

Description=script description %I

[Service]

Type=simple

ExecStart=/script.py %i

Restart=on-failure

[Install]

WantedBy=multi-user.target

然后执行:

$ systemctl start foo@parameter1.service foo@parameter2.service

要么…

目标依赖

您可以创建链接到单个目标的多个单元:

#/etc/systemd/system/bar.target

[Unit]

Description=bar target

Requires=multi-user.target

After=multi-user.target

AllowIsolate=yes

然后您只需将.service单元修改为WantedBy=bar.target

#/etc/systemd/system/foo@.service

[Unit]

Description=script description %I

[Service]

Type=simple

ExecStart=/script.py %i

Restart=on-failure

[Install]

WantedBy=bar.target

然后,您只需并行启用所需的foo服务,然后启动bar目标,如下所示:

$ systemctl daemon-reload

$ systemctl enable foo@param1.service

$ systemctl enable foo@param2.service

$ systemctl start bar.target

这适用于任何类型的单位,而不仅仅是模板单位。

以上是 带多个execStart的Systemd 的全部内容, 来源链接: utcz.com/qa/436329.html

回到顶部