0

我需要从当前 cgroup 之外的 systemd 服务运行外部程序。我找到了一个systemd-run可能会解决这个问题的工具,但我被 systemd 版本 204 卡住了,它还不可用。还有其他解决方案吗?

我的问题更详细:

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

4

1 回答 1

2

您可以在 /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
于 2014-11-14T21:49:44.083 回答