Câu hỏi Khôi phục phiên tmux sau khi khởi động lại


Có cách nào để lưu một phiên tmux? Nói cách khác, nếu tôi khởi động lại máy tính, tôi sẽ luôn luôn mất các phiên?


216
2018-06-21 04:17


gốc


Bạn có thể ngủ đông thành đĩa thay thế - Mâtt Frëëman
Hibernating là một thay thế để rời khỏi máy tính của bạn chạy liên tục, không khởi động lại. - chepner
@chepner: Có những ngày khi *** System restart required *** - karatedog
@karatedog Có, vì vậy cả hai chúng tôi đồng ý rằng ngủ đông không phải là một giải pháp để mất phiên tmux của bạn khi khởi động lại. - chepner


Các câu trả lời:


Có, nếu bạn khởi động lại máy tính, bạn sẽ mất các phiên. Không thể lưu phiên. Nhưng, chúng có thể được viết kịch bản. Điều thực tế nhất là kịch bản một số phiên để bạn có thể tạo lại chúng. Ví dụ, đây là một kịch bản shell tầm thường để tạo một phiên:

#!/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

Đây là những gì nó làm. Đầu tiên, nó sẽ kiểm tra nếu có bất kỳ phiên nào đã có với tên đó (trong trường hợp này, tên gốc là "script") với tmux có phiên. Nó kiểm tra mã trả về. Nếu có một phiên đang diễn ra với tên đó, nó sẽ bỏ qua chu trình "if" và đi thẳng đến dòng cuối cùng, nơi nó gắn với phiên. Nếu không, nó sẽ tạo một phiên và gửi một số khóa tới nó (chỉ cần chạy một tập lệnh ngẫu nhiên ngay bây giờ). Sau đó, nó thoát khỏi khối "nếu" và đính kèm.

Đây là một rất mẫu tầm thường. Bạn có thể tạo nhiều cửa sổ, panes và các cửa sổ tương tự trước khi đính kèm.

Điều này sẽ không phải là điều tương tự bạn đã yêu cầu, mặc dù. Nếu bạn thực hiện bất kỳ thay đổi nào đối với phiên, ví dụ bạn đổi tên cửa sổ và tạo một ngăn mới trong cửa sổ đó, nếu bạn khởi động lại những thay đổi đó, tất nhiên sẽ không được lưu.

Có một số công cụ giúp dễ dàng quá trình phiên tập lệnh, mặc dù tôi thích làm việc theo cách thủ công hơn (tôi nghĩ nó linh hoạt hơn). Những công cụ này là Tmuxinator và Teamocil.

Nguồn thông tin chính của tôi là cuốn sách Tmux "The Pragmatic Bookshelf".


140
2018-06-22 08:58



không có âm thanh như vậy sẽ làm bất cứ điều gì nếu tôi muốn khôi phục một phiên với 5 tập tin mở. Không có cách nào để làm điều đó? - chovy
Tmux không biết gì về trạng thái của các tiến trình mà bạn có thể đã chạy. Bạn có thể viết kịch bản có tương tự các tệp mở bằng cách có lệnh 'send-keys' hoặc 'split-window' là 'vim file1 file2 file3' hoặc xem trong trình quản lý phiên của trình soạn thảo của bạn (vim-S và tương tự) - bloy
Mục đích của tmux send-keys ... hàng? - Dominykas Mostauskis
@DominykasMostauskis lệnh đó gửi nhấn phím cho phiên được chỉ định. Nó giống như bước vào phiên làm việc và nhập những khóa đó từ bàn phím. Trong trường hợp này, bạn gửi "~ / bin / script", sau đó nhấn Enter. - Dakatine
thế nào tôi có thể có kịch bản làm ssh đăng nhập với tên người dùng và vượt qua? (Tôi biết nó không được bảo đảm chỉ muốn biết nếu nó có thể cho các hệ thống mà tôi không quan tâm về seurity nhưng vẫn phải có người dùng và vượt qua). - Jas


Tôi đã viết một tập lệnh bash đơn giản tiếp tục mở các phiên tmux, cửa sổ và các thư mục làm việc hiện tại trong mỗi phiên.

Gọi nó như vậy theo cách thủ công hoặc định kỳ từ cron (vì bạn có thể quên):

tmux-session save

Nó sẽ viết thư cho ~/.tmux-session. Khôi phục chúng sau khi khởi động lại như sau:

tmux-session restore

Tôi thấy điều này tốt hơn nhiều so với một kịch bản Perl dài vài trăm dòng.


100
2017-07-04 22:37





Tôi đã viết một plugin tmux cho phép bạn lưu toàn bộ môi trường tmux và khôi phục lại sau này. Nó cố gắng để được thực sự chi tiết để bạn có một cảm giác bạn không bao giờ bỏ tmux.

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

Cập nhật: bây giờ có một tmux-continuum plugin thực hiện lưu nền tự động của môi trường tmux. Tùy chọn nó cũng * tự động * khôi phục tmux env sau khi khởi động lại máy tính.


66
2017-08-30 09:16



Ngay khi tôi đăng "câu trả lời" của tôi với cùng một liên kết tôi nhìn lên - "do'h!" Tìm thấy điều này trong khi cố gắng nhớ những gì plugin của bạn được gọi. - phatskat
Plugin này không phải là xấu, nhưng nó đã không khôi phục lại tất cả các chương trình của tôi. Sẽ đọc thêm tài liệu của bạn và có thể gửi một vấn đề về github. - Arne
@Arne Tùy thuộc vào chương trình, điều này có thể yêu cầu kiểm tra chương trình. Thay vào đó, tôi sẽ khuyên bạn nên cấu hình các chương trình của bạn để khôi phục - các tệp .vimrc liên tục và các vị trí con trỏ cho vim, v.v. - và lưu trữ tmux pane_current_command cho các chương trình như người đàn ông có thể được mở lại. Checkpointing là rất phức tạp trong quan điểm của tôi, nhưng giá trị xem xét trong mọi trường hợp. - John P
@ bruno-sutic whats sự khác biệt giữa các plugin của bạn (tmux-resurrect) và tmux-coninuum? - lony


tmuxinator là một công cụ được viết bằng Ruby, có thể được sử dụng để tạo và quản lý các phiên tmux một cách dễ dàng. Nó có thể được sử dụng để tạo ra một dự án, mà sau này có thể được khởi tạo như là phiên tmux.


10
2018-06-26 17:40





Xem xét giải pháp từng phần này được tìm thấy đây

Tác giả tạo ra một hàm lưu lịch sử của phiên tmux để duy trì trạng thái của phiên tmux sau khi khởi động lại máy chủ.


5
2018-02-02 21:54



Bạn có thể vui lòng đăng những gì họ nói không? Liên kết có thể bị hỏng. - cpast
@cpast: Điều này đúng, nhưng nhận xét cũng có thể bị hỏng. Tốt nhất để cung cấp cho cả :) - danielpops