Назад | Перейти на главную страницу

Есть ли способ управлять двумя инстанцированными сервисами systemd как единым целым?

У меня есть пара веб-сервисов python, которые я пытаюсь запустить на Fedora 15. Их запускает пастер, и единственная разница в их запуске - это файл конфигурации, который они читают.

Кажется, это хорошо подходит для экземпляров сервисов systemd, но я бы хотел иметь возможность управлять ими как единым целым. Целевой объект systemd, для которого требуются обе службы, кажется подходящим вариантом. Запуск цели запускает обе службы, но остановка цели оставляет их работающими.

Вот служебный файл:

[Unit]
Description=AUI Instance on Port %i
After=syslog.target

[Service]
WorkingDirectory=/usr/local/share/aui
ExecStart=/opt/cogo/bin/paster serve --log-file=/var/log/aui/%i deploy-%i.ini        
Restart=always
RestartSec=2
User=aui
Group=aui

[Install]
WantedBy=multi-user.target

А вот и целевой файл:

[Unit]                    
Description=AUI           
Requires=aui@5001.service
Requires=aui@5002.service
After=syslog.target   

[Install]                 
WantedBy=multi-user.target

Возможна ли такая группировка с помощью systemd?

Посмотрите на использование BindsTo возможность связать блоки вместе. В systemd.unit(5) справочная страница описывает это так:

BindsTo =

Настраивает зависимости требований, очень похожие по стилю на Requires =, однако в дополнение к этому поведению он также объявляет, что этот модуль останавливается, когда любой из перечисленных модулей внезапно исчезает. Модули могут внезапно, неожиданно исчезнуть, если служба завершается по своему выбору, устройство отключено или точка монтирования отключена без участия systemd.

Похоже, он должен делать то, что вы хотите, и связывать одно устройство с другим, чтобы всякий раз, когда ведущий останавливает, ведомый также останавливался, и наоборот для запуска.

Не забывайте, что вы также можете использовать Before/After чтобы указать порядок, в котором они должны запускаться при необходимости.