Tmux

在最後一個會話存在後,如何讓 tmux 伺服器繼續執行?

  • April 10, 2020

我正在嘗試將 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

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

引用自:https://unix.stackexchange.com/questions/488043