題 重啟後恢復tmux會話


有沒有辦法保存tmux會話?換句話說,如果我重新啟動計算機,我是否會丟失會話?


224
2018-06-21 04:17


起源


您可以作為替代方案休眠到磁盤 - Mâtt Frëëman
休眠是讓計算機持續運行而不是重啟的替代方案。 - chepner
@chepner:有那些日子的時候 *** System restart required *** - karatedog
@karatedog是的,所以我們都同意休眠不是在重啟時丟失你的tmux會話的解決方案。 - chepner


答案:


是的,如果您重新啟動計算機,您將失去會話。會話無法保存。 但是,它們可以編寫腳本。 事實上最重要的是 腳本 一些會話,以便您可以重新創建它們。 例如,這是一個創建會話的簡單shell腳本:

#!/bin/zsh                                                                                                   

SESSIONNAME="script"
tmux has-session -t $SESSIONNAME &> /dev/null

if [ $? != 0 ] 
 then
    tmux new-session -s $SESSIONNAME -n script -d
    tmux send-keys -t $SESSIONNAME "~/bin/script" C-m 
fi

tmux attach -t $SESSIONNAME

這是它的作用。 首先,它檢查是否有任何具有該名稱的會話(在這種情況下,原始名稱是“script”) tmux有會話。 它檢查返回碼。如果已經存在具有該名稱的正在進行的會話,則它會跳過“if”循環並直接進入最後一行,它將附加到會話。 否則,它會創建一個會話並向其發送一些密鑰(現在只運行一個隨機腳本)。 然後它退出“if”塊並附加。

這是一個 非常 瑣碎的樣本。您可以在附加之前創建多個窗口,窗格等。

這將  但是,你要求的卻是一樣的。如果您對會話進行了任何更改,例如,您重命名一個窗口並在其中創建一個新窗格,如果您重新啟動,那麼這些更改當然不會被保存。

有一些工具可以簡化腳本會話的過程,雖然我更喜歡手動操作(我認為它更通用)。這些工具是 Tmuxinator 和 Teamocil

我的主要信息來源是“實用書架”Tmux書。


146
2018-06-22 08:58



如果我想恢復打開5個文件的會話,聽起來不會做任何事情。沒辦法那樣做? - chovy
Tmux對您可能已運行的進程狀態一無所知。你可以編寫腳本 相同 通過將'send-keys'或'split-window'命令設置為'vim file1 file2 file3'打開文件或查看編輯器的會話管理(vim -S等) - bloy
這是什麼目的 tmux send-keys ... 線? - Dominykas Mostauskis
@DominykasMostauskis那命令 發送 按鍵到指定的會話。這就像進入會話,並從鍵盤輸入這些鍵。在這種情況下,您發送“〜/ bin / script”,然後按Enter鍵。 - Dakatine
我可以讓腳本用ssh登錄用戶名並通過嗎? (我知道它不安全只是想知道它是否可能用於我不關心seurity但仍然需要用戶和通過的系統)。 - Jas


我寫了一個簡單的bash腳本 持續打開每個中的tmux會話,窗口和當前工作目錄。

從cron手動或定期調用它(因為你可能會忘記):

tmux-session save

它會寫入 ~/.tmux-session。重啟後恢復它們如下:

tmux-session restore

我覺得這比幾百行的Perl腳本要好得多。


106
2017-07-04 22:37





我寫了一個tmux插件,可以讓你保存完整的tmux環境並在以後恢復它。 它力求非常詳細,以便您有一種從不退出tmux的感覺。

https://github.com/tmux-plugins/tmux-resurrect

更新:現在有一個 TMUX,連續 執行tmux環境自動後台保存的插件。可選地,它還*在計算機重啟後自動*恢復tmux env。


71
2017-08-30 09:16



就像我用相同的鏈接發布我的“答案”時,我抬起頭來 - “做吧!”在嘗試記住您的插件被調用時發現了這一點。 - phatskat
這個插件還不錯,但它沒有恢復我的所有程序。將閱讀更多您的文檔,並可能在github上提交一個問題。 - Arne
@Arne根據程序的不同,這可能需要程序檢查點。相反,我建議配置你的程序來恢復 - 持久的.vimrc文件和vim等的光標位置 - 並為可以重新打開的人等程序存儲tmux pane_current_command。在我看來,檢查點非常複雜,但無論如何都值得研究。 - John P
@ bruno-sutic你的插件(tmux-resurrect)和tmux-coninuum之間的差異是什麼? - lony


tmuxinator 是一個用Ruby編寫的工具,可以輕鬆地用於創建和管理tmux會話。它可以用於創建項目,稍後可以將其實例化為tmux會話。


10
2018-06-26 17:40





考慮這個部分解決方案 這裡

作者創建了一個保存tmux會話歷史記錄的函數,以便在服務器重啟後保持tmux會話的狀態。


5
2018-02-02 21:54



你能發帖說出來嗎?鏈接可能會腐爛。 - cpast
@cpast:這是真的,但評論也可以腐爛。最好給兩個:) - danielpops