繁体   English   中英

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

[英]How to run external program from systemd service in independent cgroup

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

我的问题更详细:

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

您可以在 /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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM