เรียกคืนเซสชั่น tmux หลังจากรีบูต


255

มีวิธีบันทึกเซสชัน tmux หรือไม่? กล่าวอีกนัยหนึ่งถ้าฉันรีบูทคอมพิวเตอร์ฉันจะสูญเสียการประชุมตลอดไปหรือไม่?


1
คุณสามารถไฮเบอร์เนตลงดิสก์แทนได้
MâttFrëëman

36
การไฮเบอร์เนตเป็นอีกทางเลือกหนึ่งในการปล่อยให้คอมพิวเตอร์ของคุณทำงานอย่างต่อเนื่องไม่ใช่การรีบูตเครื่อง
chepner

5
@chepner: มีวันเหล่านั้นเมื่อ*** System restart required ***
karatedog

2
@karatedog ใช่ดังนั้นเราทั้งสองตกลงว่าการจำศีลไม่ใช่วิธีการที่จะสูญเสียเซสชั่น tmux ของคุณในการรีบูต
chepner

คำตอบ:


170

ใช่ถ้าคุณรีบูทคอมพิวเตอร์คุณจะสูญเสียเซสชัน ไม่สามารถบันทึกเซสชัน แต่พวกเขาสามารถสคริปต์ สิ่งที่จริง ๆ แล้วสิ่งที่ทำกันมากที่สุดคือการเขียนสคริปต์บางเซสชันเพื่อให้คุณสามารถสร้างใหม่ได้ ตัวอย่างเช่นต่อไปนี้เป็นเชลล์สคริปต์ตัวเล็กสำหรับสร้างเซสชัน:

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

นี่คือสิ่งที่มันทำ ครั้งแรกก็จะตรวจสอบว่ามีเซสชั่นใด ๆ ที่มีชื่ออยู่แล้ว (ในกรณีนี้ชื่อเดิมมากคือ "สคริปต์") กับtmux ได้เซสชั่น มันจะตรวจสอบรหัสส่งคืน หากมีเซสชั่นอย่างต่อเนื่องด้วยชื่อนั้นแล้วมันจะข้ามรอบ "ถ้า" และตรงไปที่บรรทัดสุดท้ายที่มันแนบมากับเซสชั่น มิฉะนั้นจะสร้างเซสชันและส่งกุญแจไปให้ (เพียงเรียกใช้สคริปต์แบบสุ่มในตอนนี้) จากนั้นจะออกจากบล็อก "if" และสิ่งที่แนบมา

นี้เป็นอย่างมากตัวอย่างเล็ก ๆ น้อย ๆ คุณสามารถสร้างหลายหน้าต่างบานหน้าต่างและสิ่งที่คล้ายกันก่อนที่คุณจะแนบ

นี่จะไม่ใช่สิ่งเดียวกันกับที่คุณถาม หากคุณทำการเปลี่ยนแปลงใด ๆ ในเซสชันเช่นคุณเปลี่ยนชื่อหน้าต่างและสร้างบานหน้าต่างใหม่ในนั้นหากคุณรีบูตการเปลี่ยนแปลงเหล่านั้นจะไม่ได้รับการบันทึกแน่นอน

มีเครื่องมือบางอย่างที่ทำให้ขั้นตอนการเขียนสคริปต์ง่ายขึ้นแม้ว่าฉันจะชอบทำสิ่งต่างๆด้วยตนเอง (ฉันคิดว่ามันมีประโยชน์มากกว่า) เครื่องมือเหล่านี้จะTmuxinatorและTeamocil

แหล่งข้อมูลหลักของฉันคือหนังสือ "The Pragmatic Bookshelf" Tmux


1
ไม่ดูเหมือนว่าจะทำอะไรถ้าฉันต้องการคืนค่าเซสชันที่เปิด 5 ไฟล์ ไม่มีทางทำเช่นนั้น?
chovy

4
Tmux ไม่ทราบอะไรเกี่ยวกับสถานะของกระบวนการที่คุณอาจเคยทำงาน คุณสามารถสคริปต์ที่มีไฟล์เดียวกันเปิดอยู่โดยให้คำสั่ง 'send-keys' หรือ 'split-window' เป็น 'vim file1 file2 file3' หรือดูการจัดการเซสชันของเอดิเตอร์ (vim -S และอื่น ๆ )
bloy

จุดประสงค์ของtmux send-keys ...บรรทัดคืออะไร
Dominykas Mostauskis

2
@DominykasMostauskis คำสั่งนั้นส่งการกดคีย์ไปยังเซสชันที่ระบุ มันเหมือนกับการเข้าสู่เซสชั่นและการป้อนคีย์เหล่านั้นจากคีย์บอร์ด ในกรณีนี้คุณส่ง "~ / bin / script" ตามด้วย Enter
Dakatine

1
การรวมกันsome command; if [ $? != 0 ]; then .....เป็นเรื่องง่ายมากขึ้นในการเขียน (และการอ่าน) if ! some command; then .....เป็น:
fonini

117

ฉันเขียนสคริปต์ทุบตีง่าย ๆที่ยังคงอยู่เซสชัน tmux เปิด windows และไดเรกทอรีทำงานปัจจุบันในแต่ละ

เรียกว่าเป็นอย่างนั้นด้วยตนเองหรือเป็นระยะจาก cron (เพราะคุณอาจลืม):

tmux-session save

~/.tmux-sessionมันจะเขียนถึง คืนค่าพวกเขาหลังจากรีบูตเช่น:

tmux-session restore

ฉันพบสิ่งนี้ดีกว่าสคริปต์ Perl ยาวหลายร้อยบรรทัด


เป็นเพียงแค่นี้ถ้าคุณมีหนึ่งเซสชั่น tmux
Sevenearths

86

ฉันเขียนปลั๊กอิน tmux ที่ช่วยให้คุณบันทึกสภาพแวดล้อม tmux ที่สมบูรณ์และกู้คืนได้ในภายหลัง มันมุ่งมั่นที่จะให้รายละเอียดอย่างแท้จริงเพื่อให้คุณมีความรู้สึกที่คุณไม่เคยออกจาก tmux

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

อัปเดต: ตอนนี้มีปลั๊กอินtmux-continuumที่ทำการบันทึกพื้นหลังอัตโนมัติของสภาพแวดล้อม tmux อีกทางเลือกหนึ่งคือ * โดยอัตโนมัติ * จะเรียกคืน tmux env หลังจากรีบูตคอมพิวเตอร์


เช่นเดียวกับที่ฉันโพสต์ "คำตอบ" ของฉันด้วยลิงก์เดียวกับที่ฉันค้นหา - "do'h!" พบสิ่งนี้ในขณะที่พยายามจดจำสิ่งที่ปลั๊กอินของคุณถูกเรียก
phatskat

ปลั๊กอินนี้ไม่เลว แต่ไม่ได้กู้คืนโปรแกรมทั้งหมดของฉัน จะอ่านเอกสารของคุณมากขึ้นและอาจส่งปัญหาเกี่ยวกับ Github
Arne

@Arne ขึ้นอยู่กับโปรแกรมนี้อาจต้องใช้จุดตรวจโปรแกรม แต่ฉันขอแนะนำให้กำหนดค่าโปรแกรมของคุณเพื่อกู้คืน - ไฟล์. vimrc แบบถาวรและตำแหน่งเคอร์เซอร์สำหรับ vim ฯลฯ - และจัดเก็บ tmux pane_current_command สำหรับโปรแกรมเช่น man ที่สามารถเปิดใหม่ได้ ความเห็นของฉันซับซ้อนมากในความคิดของฉัน แต่ควรพิจารณาในทุกกรณี
จอห์น P

@ bruno-sutic ความแตกต่างระหว่างปลั๊กอินของคุณ (tmux-resurrect) และ tmux-coninuum คืออะไร?
lony

ขณะนี้ผมจำเป็นต้องมีการแก้ไขอย่างต่อเนื่องเช่นนี้จะทำให้มันทำงานgithub.com/tmux-plugins/tmux-continuum/blob/master/docs/...
rofrol

10

tmuxinatorเป็นเครื่องมือที่เขียนใน Ruby ซึ่งสามารถใช้เพื่อสร้างและจัดการเซสชัน tmux ได้อย่างง่ายดาย มันสามารถใช้ในการสร้างโครงการซึ่งในภายหลังสามารถยกตัวอย่างเช่นเดียวกับเซสชั่น tmux


5

ลองพิจารณาวิธีแก้ปัญหาบางส่วนที่นี่

ผู้เขียนสร้างฟังก์ชันที่บันทึกประวัติของเซสชัน tmux เพื่อคงสถานะของเซสชัน tmux ที่โพสต์เซิร์ฟเวอร์รีบูต


17
คุณช่วยโพสต์สิ่งที่พวกเขาพูดได้ไหม ลิงค์สามารถเน่า
cpast

1
@cpast: นี่เป็นความจริง แต่ความคิดเห็นยังสามารถเน่าได้ ดีที่สุดที่จะให้ทั้ง :) :)
danielpops

6
@ รวมลิงค์ของคุณกลับ 404
rofrol

0

ฉันใช้https://github.com/jimeh/tmuxifierสำเร็จสำหรับการสร้างเซสชันใหม่ สามารถติดตั้งได้โดยไม่ต้องใช้ทับทิมเพียงแค่ใช้คอมไพล์

ตัวอย่างอธิบายได้ด้วยตนเองเช่น: https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.