今天我发现我的机器上运行着公司 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
。