处理有系统的雨刷机的方便代码
nspawn-tools的Python项目详细描述
nsPawn工具
这是一个小项目,旨在为与 系统的雨刷机。目前,它包含两个程序。他们的 功能描述如下。它还包含一些相关的库 可用于其他目的的代码。这些设计是为了 使用使用初始化系统(如runit或s6 overlay)的计算机 (也可能是systemd,具体取决于程序)。
这个项目是免费软件:您可以在 GNU通用公共许可第3版的条款 软件基础当前没有其他版本适用于此项目。这个 项目分发时不作任何保证。请参阅license.txt以获取 许可证的全文。
n按回车键
这是util linux包中nsenter实用程序的包装。没有 这就需要手动计算出leader进程的pid 是,然后手动运行nsenter并记住确保 输入领导进程正在运行的所有相同命名空间。
要使用nspawn enter,请按如下方式运行:
nspawn-enter mymachinename
可以避免输入leader进程的某些名称空间。你可以 传递–no network标志以避免输入网络名称空间。你可以通过 –no pid标志以避免输入pid名称空间。我加了这些来帮助 调试容器中的问题(特别是网络问题)。它可以 也可以帮助安装软件包。因此,这些标志不是 通用。如果有人想提供一个补丁,使这个通用的 nsenter支持的命名空间标志,我很乐意考虑。
n黎明停止
设置systemd nspawn容器时遇到的问题之一 使用非systemd的init系统运行会使计算机关闭 作为系统服务单元运行时完全关闭。最初,我排除了 运行systemd nspawn时的–keep unit标志位于 单位,并使用“machinectl kill mymachinename–kill who=leader”作为 执行停止线。不幸的是,这仍然导致了不公平的终止 在容器中的所有进程中。
由于machinectl在 领导程序实际上已经终止。相反,“machinectl kill”命令 (默认情况下)只需将sigterm信号发送给leader进程,然后 立即退出。StReD会看到ExcSTOP命令已经退出,并且 容器中仍有进程在运行,并将其杀死 为了完成它的工作。
nspawn stop通过计算领导者流程来解决这个问题, 调用“machinectl kill”本身,然后等待引导进程 在退出前实际上终止。用这个作为execstop 相关服务单元的程序,它给出了 容器有足够的时间完全关闭。
要使用nspawn stop,请按如下方式运行:
nspawn-stop mymachinename
可以调整nspawn stop等待 通过传递–timeout标志来终止leader进程:
nspawn-stop mymachinename –timeout 10
默认超时为60秒。注意nspawn stop不会杀死 容器内部的进程。如果超时过期并且 仍在容器中运行的进程,由调用方终止 他们当用作nspawn计算机的execstop程序时,调用方是 systemd,它将杀死这些剩余的进程(如上所述)。