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

标签 linux systemd

我需要从当前 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

关于linux - 如何在独立cgroup中从systemd服务运行外部程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26674151/

相关文章:

linux - 别名 mkdir 以在 Mac 上打印详细输出

linux - 在 shell 脚本中运行 sudo 命令

javascript - 当 Node Js 应用程序开始使用 Systemd 时,Nodejs 应用程序不会生成 python 子进程

linux - %H :%i. pid 在 .service 文件中做什么?

tomcat8 - 通过 tomcat.service 设置 tomcat8 的 umask

linux - 这个 Cron 的时间表是什么?

linux - Liblua5.3-lpeg.so.2 : cannot open shared object file

c# - 键盘代码翻译

linux - systemd:当主服务崩溃时停止依赖服务

ansible - Ansible处理程序-独占重启或重新加载