当前位置: 首页 > 面试题库 >

带多个execStart的Systemd

刘阳荣
2023-03-14
问题内容

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

[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

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



 类似资料:
  • 问题内容: 我需要构建一个具有多个窗口的应用程序。在其中一个窗口中,我需要能够玩一个简单的游戏,而另一个窗口必须显示问题并获得影响游戏的用户的响应。 (1)我想使用pygame来制作游戏。有一种 简单的 方法可以让pygame在多个窗口中运行吗? (2)如果没有简单的方法可以解决(1),是否有一种简单的方法来使用其他一些Python GUI结构,从而允许我同时运行pygame和另一个窗口? 问题答

  • 我是Node.js和Express的新手,我一直在做一个RESTful API项目,我试图在URL中发送一个带有多个参数的GET请求: 这是我的路线: 我是这样称呼它的: 而且我也尝试过 它最终会走这条路线: 那么,我写endpoint的方式是否错误?还是我要求的方式?

  • 我现在一筹莫展。 请求代码收集在一个ArrayList中,这样当程序退出时,另一个函数可以清除所有警报。 现在的问题是:我的警报器打不响。我能够找到这个函数的错误。AlarmManager实例很好。我在底部设置了一个测试警报(在带有星号的行之后)。着火了。为什么???

  • 我在RestController中对一个实体使用QuerydslPredicate,它有一个date对象,我希望能够查询给定日期之前/之后/之间的日期,希望有类似的东西 null

  • 问题内容: 我想要一个有两列的表。一栏用于记录的创建时间,另一栏用于记录的修改时间。我希望这些值由数据库处理。我不想让我的应用程序层考虑一下。 我知道,如果您有一个带有或的列,那么您将无法拥有另一个列。您可以使用,但没有办法在触发器之外默认它,据我所知。 我发现您可以具有多个列,方法是将每个列不带或保留,并在创建记录时插入,以使每个列具有当前时间戳。从这一点开始,第一列将自动更新。 这个效果非常好

  • 问题内容: 我正在尝试建立一个查询,该查询将找到所有用户文档(docType =用户),然后根据许多过滤器对其进行过滤。例如位置,性别,年龄等。过滤器是根据我正在构建的搜索功能上的用户输入来添加/删除的。 以下没有结果: 以下返回结果: 后者虽然返回结果,但从长远来看是行不通的,因为我可能想为年龄,性别等添加一个额外的过滤器,而且我似乎无法添加多个字段。如果我删除位置过滤器,则第一个查询有效。 问