从 systemd(和/或 SysV)单元中断启动

从 systemd(和/或 SysV)单元中断启动

我目前正在创建一个守护进程,旨在帮助管理 Linux 虚拟机。它需要能够使系统处于无法登录但有可用网络的状态。我怎么能这样做呢?

答案1

为这些系统维护活动创建一个新的 systemd 目标,因为阻止用户登录可能并不是唯一需要更改的系统活动。让该目标依赖于默认目标,这样您就不会更改当前图形模式或注销用户。

创建一个新的 systemd 服务,通过创建或删除 /etc/nologin 文件来阻止登录(有关 /etc/nologin 的工作原理,请参阅 /etc/pam.d 中 pam_nologin 的使用)。请注意仅删除您创建的 /etc/nologin 文件(例如,通过检查内容中的魔术字符串)。让新的 systemd 目标想要该服务。

即使您这样做,仍然会运行“用户”,例如 gdm 显示登录屏幕。大多数虚拟机的存在是为了支持用户登录命令行以外的服务;对于那些您可能需要从负载共享集群中取消计算机注册的角色。当你说“没有用户”时,你需要非常清楚你的意思。

系统更新的经验是,最好在正常操作期间下载并准备它们,然后在重新启动系统时应用它们。 Systemd 有一些你可以利用的钩子。请参阅 pkcon 系统了解如何使用它们。您可能想要一种“耗尽”状态,在这种状态下,您没有获得或不允许新会话(这可能会自动发生,就像从集群中分离一样,或者可能会需要一个新的目标,如上所述)。

在 Linux 虚拟机的管理方面已经做了很多工作,围绕 Ansible、Puppet 等有大型社区。所以我对你正在编写另一个守护进程感到有点惊讶。

相关内容