我正在尝试将 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