使用多个execStart进行系统化[关闭]

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用多个execStart进行系统化[关闭]相关的知识,希望对你有一定的参考价值。

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

[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,但你可以添加尽可能多的ExecStartPre,ExecStartPost`,但这些都不适合长时间运行的命令,因为它们是串行执行的,一开始就被杀死,然后开始下一个。

如果Type=oneshot你可以指定多个ExecStart,它们不是并行地串行运行。

如果你想要的是并行运行多个单元,你可以做一些事情:

If they differ on 1 param

您可以使用模板单位,因此您可以创建/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

要么...

Target dependencies

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

#/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

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

另一答案

你可以使用ExecStartPreExecStartPost作为其中一个脚本

[Unit]
Description=script description

[Service]
Type=simple
ExecStartPre=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure

[Install]
WantedBy=multi-user.target

以上是关于使用多个execStart进行系统化[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

ip报文发送时进行分片 在发送过程中丢失一个或是多个片时如何处理 以及如何分辨丢失与否?

多个平台的性能分析[关闭]

linux内核分析作业:操作系统是如何工作的进行:完成一个简单的时间片轮转多道程序内核代码

Java 多线程总结

使用 sklearn 对多个特征进行编码 [关闭]

Windows线程开发