如何从独立cgroup中的systemd服务运行外部程序

时间:2014-10-31 11:55:04

标签: linux systemd

我需要从当前cgroup之外的systemd服务运行外部程序。 我找到了一个systemd-run工具,可能会解决这个问题,但我仍然坚持使用systemd版本204,但尚未提供。 还有其他解决方案吗?

我的问题更详细:

应用程序捆绑在debian包中,将作为systemd服务安装和运行。 此服务稍后会下载较新版本的应用程序并运行dpkg -i myapplication.deb。 在安装升级期间必须停止服务 - 但在cgroup中的所有进程结束之前它不会停止。现在我们遇到了死锁,因为dpkg本身就在这个cgroup中运行。服务停止超时后,dpkg将被终止并且未安装升级。

1 个答案:

答案 0 :(得分:1)

您可以在/ run / systemd / system路径中动态创建服务。此路径是运行时服务目录。

稍后你告诉systemd重新加载它的状态。重新加载完成后,现在systemd知道您的服务。启动服务将在服务自己的cgroup中进行。

我认为你可以这样做:

#!/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