是否可以使用相同的脚本创建具有不同输入参数的服务?
例如:
[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
,但这些都不适合于长时间运行的命令,因为它们是串行执行的,每次启动的进程在下一个开始之前被杀死。
如果你想要运行多个单元并行执行,有几件事情你可以做:
你可以使用模板单元,创建一个 /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
注意: 这适用于任何类型的单位,而不仅仅是模板单位。
systemctl stop bar.target
不会停止任何这些链接服务 :'( - jirislavsystemctl stop foo@*
。 - aleivagfoo@.service
的[Unit]
部分中添加PartOf=bar.target
。这样可以在停止target时停止服务。 - Johnybar.target
,则需要在 bar.target
中添加 [Install]
部分并使用 WantedBy=multi-user.target
行,然后使用以下命令启用此目标:
systemctl enable bar.target
。 - Johny您可以使用ExecStartPre
或ExecStartPost
其中一个脚本。
[Unit]
Description=script description
[Service]
Type=simple
ExecStartPre=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure
[Install]
WantedBy=multi-user.target
parameters1
和 parameters2
,然后将它们传递给 Python 脚本。 - amin khozaei