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