Как запустить внешнюю программу из службы systemd в независимой cgroup

Мне нужно запустить внешнюю программу из службы systemd за пределами текущей cgroup. Я нашел инструмент systemd-run, который, вероятно, решит эту проблему, но я застрял в systemd версии 204, где он еще недоступен. Есть ли другое решение?

Моя проблема подробнее:

Приложение включено в пакет Debian и будет установлено и запущено как служба systemd. Позже эта служба загружает более новую версию приложения и запускает dpkg -i myapplication.deb. Служба должна быть остановлена ​​во время установки обновления, но она не остановится, пока не закончатся все процессы в cgroup. Теперь у нас тупик, потому что dpkg работает в этой контрольной группе. По истечении тайм-аута остановки службы dpkg уничтожается, а обновление не устанавливается.


person dorny    schedule 31.10.2014    source источник


Ответы (1)


Вы можете создать свою службу динамически в пути /run/systemd/system. Этот путь является каталогом службы среды выполнения.

Позже вы говорите systemd перезагрузить его состояние. Как только перезагрузка завершена, теперь systemd знает о вашем сервисе. Запуск вашего сервиса произойдет в собственной контрольной группе сервиса.

Я думаю, вы могли бы сделать что-то вроде этого:

#!/bin/sh

printf "[Service]\nType=oneshot\nExecStart=dpkg -i myapplication.deb" \
> /run/systemd/system/my-dpkg.service
if [ -f "/run/systemd/system/my-dpkg.service" ]; then
    systemctl daemon-reload && \
    systemctl start dpkg.service
fi
person Umut    schedule 14.11.2014
comment
Добро пожаловать в StackOverflow. Практически в любое время, когда вы хотите опубликовать код или данные, которые вы хотели бы сохранить в своем форматировании, вы можете сделать отступ с четырьмя пробелами (или табуляцией). # — это шорткод разметки для заголовков, поэтому вместо #!/bin/sh мы увидели !/bin/sh в более крупном тексте. Вы можете сделать встроенный код с помощью обратных кавычек (вещь, похожая на апостроф, рядом с клавишей 1 над QWERTY. Поэтому, если я окружу Hello World знаком ``, ​​я получу Hello World. - person Regular Jo; 15.11.2014