Systemd Linger:让进程在登出后继续运行
systemd 的 KillUserProcesses 选项曾因在用户登出时终止所有进程而备受争议,但这并非 screen 或 tmux 等工具运行的必要条件。在 Debian 等现代发行版中,默认配置已允许进程在登出后继续运行。Linger 功能的核心价值在于允许用户在登录前启动程序,例如在笔记本电脑上实现开机自动连接 WiFi,或在图形界面配置损坏时仍能通过 SSH 远程访问。我曾为不熟悉电脑的用户启用该功能,有效减少了 KDE 服务异常导致的重启需求。虽然部分脚本会默认开启 Linger,但了解其真实作用机制,能帮助我们更灵活地管理后台服务。
当我的笔记本电脑启用了 Linger 功能后,它能在启动时自动连接 WiFi,无需等待登录,这让我在 X11 或 Wayland 配置损坏时仍能通过 SSH 远程访问它。
HN 评论区
89- graemep
这就是我不喜欢 systemd 的原因。事情不按我预期的方式运行,意味着我得花更多精力去搞明白怎么回事。
- walrus01
默认情况下,Debian Trixie 开箱即用,无需修改任何 systemd 配置文件,gnu screen 就能像往常一样正常工作。如果基本的 'screen' 分离和恢复功能在 Debian v11、v12 和 v13 之间的任何版本中失效,早就引发巨大的抗议和叫嚣了,但事实并非如此。
我推测 tmux 的情况也一样,不过还没亲自测试过。
有没有哪个主流发行版默认把这个配置标志设成了相反的值?
- benj111
我估计是漏掉了什么。为什么 tmux 之类的工具不能正常工作?是远程连接的问题吗?也就是说,你同时在本地和远程登录同一台机器,然后本地登出导致所有远程运行的进程被杀掉,但既然这样,你为什么要那样同时登录两次呢?
如果是这种情况,systemd 难道不能等到你的登录会话数归零时再关闭所有进程吗?
- shevy-java
Systemd 实在太复杂了。
- kmbfjr
尽管 systemd init 有些怪癖,比如 fstab 里的挂载项出错就直接放弃,但我从未遇到过问题。而且我挺喜欢 systemd-networkd,比起其他四五种管理网络的方式,它更胜一筹。systemd-timesyncd 也不错。
但这一点——systemd-logind 担心用户空间里有卡死的进程——正是那种典型的范围蔓延(scope creep),它恰恰验证了十年前人们对此的诸多担忧。这东西刚出来时就让我栽过几次跟头,我毫不掩饰对它的厌恶。厌恶到这种程度,以至于我只要有机会就会远离 Linux。虽然这问题有个简单的修复方案,但我已经对用户空间的混乱感到疲惫了。
是时候重新评估一下“集市”(bazaar)变成了什么样子。systemd 是个常见的抱怨点,但它并不是导致这种疲惫感的唯一因素。