我在通过 ssh 访问的远程计算机上使用 tmux。由于某些原因,tmux 会话在连续的 ssh 登录会话之间不会持续存在。我在登录我有权访问的另一台远程计算机时没有遇到此问题。这本质上与本文中描述的问题相同问题。
但是,我使用的机器已经使用ssh.service
而不是ssh.socket
,所以接受的答案对我不起作用。
采取的具体步骤:
- 通过 ssh 登录机器
- 启动 tmux 会话,做一些工作。
- 分离会话,并可能再次附加(这有效)。
- 使用 Ctrl+D 注销。
- 再次登录并尝试 tmux a 或 tmux ls (不起作用)。
答案1
经过一番研究,我找到了解决我的问题的方法。
终止 tmux 会话的原因是KillUserProcesses=yes
in的默认设置/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
当然也需要缠绵。