Systemd

Tmux 會話在 ssh 註銷時被終止

  • July 29, 2021

我在通過 ssh 訪問的遠端電腦上使用 tmux。出於某種原因,tmux 會話不會在連續的 ssh 登錄會話之間持續存在。登錄到我有權訪問的其他遠端電腦時,我沒有這個問題。這與此問題中描述的問題基本相同。

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

採取的具體步驟:

  1. 通過 ssh 登錄機器
  2. 啟動一個 tmux 會話,做一些工作。
  3. 分離會話,並可能再次附加(這有效)。
  4. 使用 Ctrl+D 註銷。
  5. 再次登錄並嘗試 tmux a 或 tmux ls(不起作用)。

經過一番研究,我找到了解決問題的方法。

殺死 tmux 會話的原因是KillUserProcesses=yesin的預設設置/etc/systemd/logind.conf

從手冊頁logind.conf

KillUserProcesses= 接受一個布爾參數。配置使用者註銷時是否應該殺死使用者的程序。如果為 true,則與會話對應的範圍單元以及該範圍內的所有程序都將終止。

解決方案是使用以下內容在使用者範圍內而不是在會話範圍內顯式啟動 tmux。

systemd-run --scope --user tmux

此外,您需要啟用“延遲”,以便即使沒有活動的使用者會話,tmux 程序也可以持續存在。

loginctl enable-linger

有關更多詳細資訊,請查看systemd-run手冊頁中的範例。

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