tmux 會話在未知的點中丟失,原因和可能的解決方案?

tmux 會話在未知的點中丟失,原因和可能的解決方案?

我試圖重新附加到長時間運行的 tmux 會話來檢查 python Web 應用程式。但是tmux attach聲稱沒有正在運行的會話,並ps顯示一個tmux進程(第一行),但帶有問號而不是數字pts

這意味著什麼——這個 tmux 會話是否永久丟失?是否還有辦法查看 python 進程的當前狀態,在 tmux 會話中產生並在pts/19(第二行)中運行?

[mhermans@web314 ~]$ ps -ef | grep mhermans
mhermans 16709     1  0 Mar04 ?        00:26:32 tmux
mhermans  8526 16710  0 Mar04 pts/19   00:20:04 python2.7 webapp.py
root      9985  6671  0 10:18 ?        00:00:00 sshd: mhermans [priv]
mhermans 10028  9985  0 10:18 ?        00:00:00 sshd: mhermans@pts/16
mhermans 10030 10028  0 10:18 pts/16   00:00:00 -bash
mhermans 16247 10030  6 10:28 pts/16   00:00:00 ps -ef
mhermans 16276 10030  0 10:28 pts/16   00:00:00 grep mhermans
mhermans 16710 16709  0 Mar04 pts/19   00:00:00 -bash
mhermans 16777 16709  0 Mar04 pts/21   00:00:00 -bash

答案1

解決方案由Webfaction 支持

由於進程仍在運行,問題是套接字被刪除,可能是由清除的 tmp 目錄引起的。

根據tmux地圖:

如果套接字被意外刪除,SIGUSR1 訊號可能會被傳送到 tmux 伺服器進程以重新建立它。

因此發送信號並附加工作:

killall -s SIGUSR1 tmux
tmux attach

答案2

終端缺席是分離會話的標誌。您tmux可以這樣找到所有會話名稱:

ls $TMP/tmux-$(id -u)或者ls /var/run/tmux/tmux-$(id -u)

——這有點依賴發行版。幾乎獨立於發行版(並且更核心)的是:

lsof -n -p 16709 -a -U

16709您清單中 tmux 的 PID 位於何處。

答案3

就是這樣這個之前的答案在這裡幫助了我(哇!)。我試圖解決確切地我連接到一個 Tmux 的情況——我可以在 中看到tmux ls在 中ps,我還可以看到其他tmux,它沒有列出,tmux ls因此我無法透過使用它的名稱附加到它(tmux attach -t myOldbas)

以下是完整的詳細資訊。流程:

71358     1849  9617  0 Sep04 pts/29   00:00:00 /bin/bash
71358     2528  9617  0 Aug31 pts/25   00:00:00 /bin/bash
71358     9617     1  0 Aug31 ?        00:08:55 tmux new -s myOld
71358     9618  9617  0 Aug31 pts/20   00:00:00 /bin/bash
71358    20199 33189  0 Sep16 pts/27   00:00:00 vim log
71358    20415 32257  0 Sep16 pts/30   00:00:00 /bin/bash
71358    24735 32257  0 Sep16 pts/33   00:00:00 /bin/bash
71358    32257     1  0 Sep16 ?        00:04:02 tmux new -s myses

現在,lsof 位真正幫助了我——當你這樣做的時候兩個過程,在我的例子中是 32257(我能看到的)和 9617(舊的)

/usr/sbin/lsof -n -p 32257 -a -U
COMMAND   PID             USER   FD   TYPE             DEVICE SIZE/OFF      NODE NAME
..
tmux    32257 uzer.buzer          7u  unix 0xffff881ff0c73480      0t0 995795763 /tmp/uzer.buzer/tmux-71358/default

然而,當我在舊的 PID 上使用時,我看到了以下內容

/usr/sbin/lsof -n -p 9617 -a -U

tmux    9617 uzer.buzer          7u  unix 0xffff881ff0c73480      0t0 995795763 /tmp/tmux-71358/default

注意,最後一個套接字路徑有何不同? 幸運的是,這就是我所需要的,然後我使用明確套接字執行了附加命令:

tmux -S /tmp/tmux-71358/default at

我在裡面!

答案4

對於以後遇到此主題的人;

如果您用於sudo執行腳本或其他內容,則tmux會話會在 root 下列出,而不是在使用 sudo 的使用者下列出,因為 sudo 之後的操作是在 root 下執行的。

要解決此問題,請使用sudo tmux a, 或tmux作為 root 重新獲得對 tmux 會話的控制。

相關內容