我已经阅读loginctl enable-linger user
并/etc/systemd/logind.conf
(KillExcludeUsers=user1 user2 user3)
Oracle Linux:配置 Systemd 以使用户进程在注销后继续运行
本教程向您展示如何在 Oracle Linux 8 系统上设置
systemd
服务管理器,以确保用户启动的服务和进程在用户会话结束后继续运行。
不再需要该工具了吗nohup
?此功能现在在 systemd 中?
我已经阅读loginctl enable-linger user
并/etc/systemd/logind.conf
(KillExcludeUsers=user1 user2 user3)
Oracle Linux:配置 Systemd 以使用户进程在注销后继续运行
本教程向您展示如何在 Oracle Linux 8 系统上设置
systemd
服务管理器,以确保用户启动的服务和进程在用户会话结束后继续运行。
不再需要该工具了吗nohup
?此功能现在在 systemd 中?
从某种程度上来说确实如此,但从 Oracle 文章的具体内容来看,绝对不是。
Systemd 不会改变 ttys 的功能方式;关闭的终端仍会向其中运行的任何程序发送 SIGHUP。因此,如果您像以前一样直接从交互式 shell 启动某个程序,那么它仍然需要比
nohup
终端存活更久 — — 就像以前一样。[虽然我认为nohup 本身是多余的;但 shell
foo & disown
甚至(foo &)
通常都能很好地完成这项工作,因为 SIGHUP 仅传递给前台 pgroup?或者类似的东西。]至于 KillExcludeUsers – 好吧,注销时终止用户所有进程的概念首先是由 systemd引入的!它与终端挂断完全无关;以前,在您从 GUI 或其他任何地方注销后,没有任何东西会导致您的进程被终止。事实上,这就是过去允许 tmux 或 Screen 工作的原因。
换句话说,systemd 默认对剩余进程的处理要严格得多,而
loginctl enable-linger
文章中描述的功能是允许您返回到更宽松的 systemd 前行为,即完全可以使用nohup
- 但绝不会使它变得多余。使 nohup 变得多余的是Oracle 帖子中未描述的停留模式的另一个
systemctl --user
功能:持久的“用户服务管理器” systemd 实例,您可以使用它通过 启动自定义服务,或通过 执行一次性命令systemd-run --user
,然后它将与您的登录会话断开连接,并在需要时运行。