У меня много файлов единиц служб, которые мне нужно перезапустить, и я не хочу вводить их все. Возможно ли иметь одну цель или службу, которая ничего не знает о том, как запускать другие службы, но группирует их вместе, чтобы они все перезапускались одной командой?
Как мне записать файл модуля службы systemd или целевой файл, если я этого хочу systemctl restart one-to-rule-them-all
?
Требования: 1. Цель uber хочет, чтобы было запущено много других служб. 2. Цель uber не должна ничего знать о том, как запустить эти службы.
Когда я попробовал это сделать, sudo systemctl restart one-to-rule.target
ничего не произошло.
# /etc/systemd/system/one-to-rule.target
[Unit]
Description=One To Rule Them All
Requires=multi-user.target
Wants=program-api.service program-gui.service yet-another.service
After=multi-user.target display-manager.service
[Install]
WantedBy=graphical.target
Каждый из этих блоков был включен, program-api.service
program-gui.service
yet-another.service
и one-to-rule.target
все они, кажется, загружены и активны. Я могу загрузить машину, и все службы появляются именно так, как я хочу. Однако я просто хочу набрать текст systemctl restart one-to-rule.target
или что-то еще, вместо перезагрузки.
Графики зависимости выглядят так
$ systemctl list-dependencies one-to-rule.target
one-to-rule.target
● ├─program-api.service
● ├─program-gui.service
● ├─yet-another.service
● └─multi-user.target
$ systemctl list-dependencies --reverse one-to-rule.target
one-to-rule.target
● └─graphical.target
решение1
PartOf=one-to-rule.target
Это может работать, но для того, чтобы на каждый из этих модулей .service распространялись перезапуски, он должен быть . (На самом деле это просто более слабая версия Requires=<…>.target
.)
К сожалению, невозможно указать обратную зависимость (ConsistsOf) непосредственно в цели – необходимо расширить все служебные файлы.