Systemd с несколькими execStart [закрыто]

Я бы знал, можно ли создать сервис с одним и тем же скриптом, запущенным с разными входными параметрами. Например:

[Unit]
Description=script description

[Service]
Type=simple
ExecStart=/script.py parameters1
ExecStart=/script.py parameters2
Restart=on-failure

[Install]
WantedBy=multi-user.target

это возможно? затем он будет запущен в серийный режим? или в два разных процесса? С наилучшими пожеланиями

2 ответов


если Type=simple в файле устройства можно указать только один ExecStart, но можно добавить столько ExecStartPre,ExecStartPost`, но ничто из этого не подходит для длительных команд, потому что они выполняются последовательно, и все, что начинается, убивается перед началом следующего.

если Type=oneshot вы можете указать несколько ExecStart, они работают последовательно, а не параллельно.

если вы хотите запустить несколько блоков параллельно, есть несколько вещей, которые вы можете do:

если они отличаются на 1 параметр

вы можете использовать единицы шаблона, поэтому вы создаете /etc/systemd/system/foo@.service. Примечание: (the @ важно).

[Unit]
Description=script description %I

[Service]
Type=simple
ExecStart=/script.py %i
Restart=on-failure

[Install]
WantedBy=multi-user.target

и затем вы exec:

$ 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, которые хотите параллельно, и запускаете целевую панель следующим образом:

$ systemctl daemon-reload
$ systemctl enable foo@param1.service
$ systemctl enable foo@param2.service
$ 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