在最后一个会话存在后,如何让 tmux 服务器保持运行?

在最后一个会话存在后,如何让 tmux 服务器保持运行?

我正在尝试将 tmux 作为 systemd 用户服务运行~/.config/systemd/user/tmux.service。当我启动服务systemd --user start tmux然后从终端运行 tmux 时,它似乎正确连接到服务的 tmux 服务器。

但是,当我关闭最后一个会话时,tmux 服务停止。这是一个问题,因为我希望 tmux 服务器对 SSH 客户端保持可用。如何防止 tmux 服务器在最后一个会话关闭后自动停止?

[Service]
Type=forking
ExecStart=tmux new-session -s %u -d
ExecStop=tmux kill-session -t %u

[Install]
WantedBy=default.target

解决方案:

[Service]
Type=forking
ExecStart=tmux new -s dummy -d
ExecStop=-tmux kill-server
Restart=on-success

[Install]
WantedBy=default.target

答案1

tmux 有一个选项exit-unattached如果启用,当没有连接的客户端时服务器将退出,您可以禁用它

set-option -s exit-unattached off

在你的~/.tmux.conf,但这似乎对我没有任何影响(打开或关闭),或者我误解了它的含义。

您可以通过添加以下行来要求 systemd 在退出时重新启动服务

Restart=on-success

您还需要编辑ExecStop命令的前缀,-以便在重新启动时忽略命令的失败kill-session(因为此时服务器不再运行)。

ExecStop=-/usr/bin/tmux kill-session -t %u

答案2

截至目前,如果将此行添加到文件中.tmux.conf,服务器在没有会话时不会关闭:

set -g exit-empty off

相关内容