我会知道是否可以使用以不同输入参数开头的相同脚本创建服务。如:
[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/[email protected]
。注意:( @
很重要)。
[Unit]
Description=script description %I
[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure
[Install]
WantedBy=multi-user.target
然后你执行:
$ systemctl start [email protected] [email protected]
要么...
您可以创建链接到单个目标的多个单元:
#/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/[email protected]
[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 [email protected]
$ systemctl enable [email protected]
$ systemctl start bar.target
注意:这适用于任何类型的单位,而不仅仅是模板单位。
你可以使用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