是否可以使用以不同输入参数启动的相同脚本创建服务?
例子:
[Unit]
Description=script description
[Service]
Type=simple
ExecStart=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure
[Install]
WantedBy=multi-user.target
可能吗?
它会以串行模式启动吗?还是在两个不同的过程中?
是否可以使用以不同输入参数启动的相同脚本创建服务?
例子:
[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
,但这些都不适用于长时间运行的命令,因为它们是串行执行的,在启动下一个命令之前,一个启动的所有内容都会被终止.
如果您可以指定多个ExecStart,那么它们是串行运行的,而不是并行运行的.
如果您想并行运行多个单元,可以做以下几件事:
可以使用模板单位,因此可以创建/etc/systemd/system/foo@.service
.NOTE:(@
很重要).
[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
然后你就可以修改自己.服务单元为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
NOTE:这适用于任何类型的单元,而不仅仅是模板单元.