systemd 在重启后不断重新启动用户会话

systemd 在重启后不断重新启动用户会话

今天我发现我的机器上运行着公司 ldap 中禁用的用户服务。关闭这些服务后,它们就不再存在了,正如我所料。

在我重启机器后,这些服务又恢复了。看来 systemd 在电脑重新启动并运行后确实启动了它们。

[root@ws ~]# ps aux | grep username
username        985  0.0  0.1  20768 11376 ?        Ss   Aug17   0:00 /usr/lib/systemd/systemd --user
username       1007  0.0  0.0  49448  3680 ?        S    Aug17   0:00 (sd-pam)
username       1025  0.0  0.0 226468  3948 ?        Ss   Aug17   0:00 /usr/bin/tmux new-session -d
username       1229  0.0  0.1 229812  8028 pts/0    Ss+  Aug17   0:00 -zsh

我怎样才能阻止 systemd 这样做?

答案1

这个“特性”(很多人认为这是一个在 Windows 中会发现的错误,但在 Linux 中却不会出现)显然被称为“linger”或“lingering”。

https://wiki.archlinux.org/index.php/systemd/User#Automatic_start-up_of_systemd_user_instances

要为所有当前已启用此功能的用户禁用逗留功能,请按照https://serverfault.com/questions/846441/loginctl-enable-linger-disable-linger-but-reading-linger-status可以执行

sudo rm /var/lib/systemd/linger/*

现在剩下的下一个问题(需要单独研究):一开始是如何启用延迟的,它会再次发生吗?与这个问题无关,因为原始发帖人写道,用户已被禁用,因此他们不太可能再次出现。

(重新添加我原始答案的部分内容,该部分内容已被删除 - @DavidPostill:如果 stack-exchange 不允许我发表评论,该怎么办?再问一个问题,由于它是重复的,它也会被删除?)

mattdm 的回答没有帮助,因为(正如他所写的)那些不是服务,而是用户会话。重启后立即由 systemd 启动(或者在我的情况下可能是由 Gnome Display Manager 启动)。当时用户不在场。

对于 mattdm 的问题“用户名第一次出现在哪里?”:

Apr 27 18:15:06 hostname systemd[1]: Started GNOME Display Manager.
Apr 27 18:15:06 hostname systemd[2702]: pam_unix(systemd-user:session): session opened for user username by (uid=0)

答案2

在我重启机器后,这些服务又恢复了。看来 systemd 在电脑重新启动并运行后确实启动了它们。

是的。这就是 systemd 所做的。事实上,根据配置,如果您终止服务,它可能会即时重新启动服务。它的工作是管理进程生命周期,通常这意味着确保应该运行的程序确实在运行。

要禁用服务,请使用以下命令,而不是终止进程systemctl disable service— 例如:

systemctl disable httpd.service

为了使其立即生效,您可以添加--now,如下所示:

systemctl disable --now httpd.service

禁用服务将阻止其在启动时启动,但不会阻止 systemd 因其他原因(例如,应其他服务的要求)启动该服务。要使服务完全不可用(“屏蔽”),请使用systemctl mask而不是disable

相关内容