我知道是否可以使用以不同输入参数开头的相同脚本创建服务。 如:
[Unit]
Description=script description
[Service]
Type=simple
ExecStart=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure
[Install]
WantedBy=multi-user.target
有可能吗?然后它会启动到串行模式?还是分成两个不同的过程?最好的问候
答案 0 :(得分:41)
如果单元文件中有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服务,并像这样启动吧目标:
$ systemctl daemon-reload
$ systemctl enable foo@param1.service
$ systemctl enable foo@param2.service
$ systemctl start bar.target
注意:这适用于任何类型的单位,而不仅仅是模板单位。
答案 1 :(得分:8)
您可以将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