Tmux 会话在 ssh 注销时被终止

Abh*_*ash 5 tmux systemd sshd

我在通过 ssh 访问的远程计算机上使用 tmux。由于某些原因,tmux 会话在连续的 ssh 登录会话之间不会持续存在。我在登录我有权访问的另一台远程计算机时没有遇到此问题。这本质上与这个问题中描述的问题相同。

但是,我使用的机器已经使用ssh.service而不是ssh.socket,所以接受的答案对我不起作用。

采取的具体步骤:

  1. 通过 ssh 登录机器
  2. 启动 tmux 会话,做一些工作。
  3. 分离会话,并可能再次附加(这有效)。
  4. 使用 Ctrl+D 注销。
  5. 再次登录并尝试 tmux a 或 tmux ls (不起作用)。

Abh*_*ash 8

经过一番研究,我找到了解决我的问题的方法。

终止 tmux 会话的原因是KillUserProcesses=yesin的默认设置/etc/systemd/logind.conf

从 的手册页来看logind.conf

KillUserProcesses= 采用布尔参数。配置用户注销时是否应终止用户的进程。如果为 true,则与会话对应的范围单元以及该范围内的所有进程都将终止。

解决方案是使用以下命令在用户范围而不是会话范围中显式启动 tmux。

systemd-run --scope --user tmux
Run Code Online (Sandbox Code Playgroud)

此外,您需要启用“延迟”,以便即使没有活动用户会话,tmux 进程也可以持续存在。

loginctl enable-linger
Run Code Online (Sandbox Code Playgroud)

有关更多详细信息,请查看systemd-run手册页中的示例。