Tmux 会话在 ssh 注销时被终止

Tmux 会话在 ssh 注销时被终止

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

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

采取的具体步骤:

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

答案1

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

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

从 的手册页来看logind.conf

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

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

systemd-run --scope --user tmux

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

loginctl enable-linger

有关更多详细信息,请查看手册页中的示例系统运行

答案2

虽然我不记得是否曾经遇到过这个问题,但我一直在使用用户服务来运行“始终在线”的 tmux 服务器:

$ cat /home/tom/.config/systemd/user/tmux-server.service 
[Unit]
Description=tmux server

[Service]
Type=forking
ExecStart=/usr/bin/tmux -f %h/.config/tmux/server.conf start-server
ExecStop=/usr/bin/tmux kill-server

[Install]
WantedBy=default.target
$ cat /home/tom/.config/tmux/server.conf 
set -s exit-empty off
set -s exit-unattached off

以及可选:

set -g detach-on-destroy off

当然也需要缠绵。

相关内容