这个问题似乎与 a specific programming problem, a software algorithm, or software tools primarily used by programmers 无关.如果您认为该问题将成为 another Stack Exchange site 上的主题,您可以发表评论,说明在哪里可以回答问题。
关闭 4 年前。
是否可以使用以不同输入参数启动的相同脚本创建服务?
例子:
[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,它们串行运行而不是并行运行。
如果您想要并行运行多个单元,您可以执行以下操作:
你可以使用模板单元,所以你创建一个/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
注意:这适用于任何类型的单元,而不仅仅是模板单元。
https://stackoverflow.com/questions/48195340/