Yeniden başlattıktan sonra tmux oturumunu geri yükle


255

Bir smokin seansını kaydetmenin bir yolu var mı? Başka bir deyişle, bilgisayarı yeniden başlatırsam, oturumları her zaman kaybeder miyim?


1
Alternatif olarak diske kış uykusuna
yatabilirsiniz

36
Hazırda bekletme, bilgisayarınızı sürekli yeniden başlatmaya değil, sürekli çalışmaya bırakmanın bir alternatifidir.
chepner

5
@chepner: O günler var*** System restart required ***
karatedog

2
@karatedog Evet, bu yüzden ikimiz de hazırda bekletme modunun, yeniden başlatma sırasında tmux oturumunuzu kaybetmenin bir çözümü olmadığı konusunda hemfikiriz.
chepner,

Yanıtlar:


170

Evet, bilgisayarınızı yeniden başlatırsanız oturumları kaybedersiniz. Oturumlar kaydedilemiyor. Ancak, komut dosyaları yazılabilir. Aslında en çok yapılan, bazı oturumları yeniden oluşturmak için komut dosyası oluşturmaktır. Örneğin, burada bir oturum oluşturmak için önemsiz bir kabuk komut dosyası:

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

İşte yaptığı şey. Öncelikle, tmux has-session ile zaten bu isimde bir oturum olup olmadığını kontrol eder (bu durumda, çok orijinal isim "script") . Dönüş kodunu kontrol eder. Bu adda devam eden bir oturum varsa, "if" döngüsünü atlar ve doğrudan oturuma eklendiği son satıra gider. Aksi takdirde, bir oturum oluşturur ve ona bazı anahtarlar gönderir (şimdilik sadece rastgele bir komut dosyası çalıştırıyor). Sonra "if" bloğundan çıkar ve ekler.

Bu çok önemsiz bir örnek. Eklemeden önce birden fazla pencere, bölme ve benzeri oluşturabilirsiniz.

Bu olacak değil de, istediğin çok aynı şey. Oturumda herhangi bir değişiklik yaparsanız, örneğin bir pencereyi yeniden adlandırır ve içinde yeni bir bölme yaratırsınız, yeniden başlatırsanız bu değişiklikler elbette kaydedilmeyecektir.

Her şeyi el ile yapmayı tercih etmeme rağmen, komut dosyası oturumları işlemini kolaylaştıran bazı araçlar var (daha çok yönlü olduğunu düşünüyorum). Bu araçlar Tmuxinator ve Teamocil'dir .

Ana bilgi kaynağım "Pragmatik Kitaplık" Tmux kitabıydı.


1
5 dosya açık olan bir oturumu geri yüklemek istersem bu bir şey yapmaz gibi gelmiyor. Bunu yapmanın yolu yok mu?
Chovy

4
Tmux, yaşadığınız süreçlerin durumu hakkında hiçbir şey bilmiyor. 'Send-keys' ya da 'split-window' komutunu açarak aynı dosyaları açmış olan komut dosyası 'vim file1 file2 file3' olabilir veya editörünüzün oturum yönetimine bakabilirsiniz (vim -S ve benzeri)
bloy

tmux send-keys ...Çizginin amacı nedir ?
Dominykas Mostauskis

2
Bu komutun @DominykasMostauskis gönderir belirtilen oturuma anahtar presler. Oturuma girmek ve klavyeden bu tuşları girmek gibi. Bu durumda, "~ / bin / script" ve ardından Enter tuşuna basarsınız.
Dakatine,

1
kombinasyon some command; if [ $? != 0 ]; then .....olarak yazmaya (ve okumak için) daha kolaydır: if ! some command; then ......
fonini

117

Her biri için açık tmux seansları, pencereler ve mevcut çalışma dizinlerini sürdüren basit bir bash betiği yazdım .

Bunu manuel olarak veya periyodik olarak crondan söyleyin (çünkü unutabilirsiniz):

tmux-session save

Bu yazacak ~/.tmux-session. Böyle yeniden başlattıktan sonra onları geri yükleyin:

tmux-session restore

Bunu birkaç yüz satırlık Perl betiğinden çok daha iyi buluyorum.


Bu sadece bir tmux seansınız olsa mı?
17:36

86

Tüm tmux ortamından tasarruf etmenizi ve daha sonra geri yüklemenizi sağlayan bir tmux eklentisi yazdım. Gerçekten ayrıntılı olmak için çaba sarf ediyor, böylece tmux'dan asla vazgeçmediğinizi hissediyorsunuz.

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

Güncelleme: şimdi tmux ortamının otomatik arka plan tasarrufunu gerçekleştiren bir tmux-devamlılık eklentisi var. İsteğe bağlı olarak ayrıca * otomatik olarak * bilgisayar yeniden başlatıldıktan sonra tmux env dosyasını geri yükler.


Tıpkı "Cevabımı" yayınladığım bağlantıyla aynı baktım - "Yap!" Eklentinizin ne dendiğini hatırlamaya çalışırken bunu buldum.
phatskat

Bu eklenti fena değil, ancak tüm programlarımı geri yüklemedi. Dokümanlarınızın daha fazlasını okuyacak ve belki de github ile ilgili bir sorun gönderecek.
Arne

@Arne Programa bağlı olarak, bu programın kontrol edilmesini gerektirebilir. Bunun yerine, programlarınızı geri yükleyecek şekilde yapılandırmanızı öneririm - kalıcı .vimrc dosyaları ve vim, vb. İçin imleç konumları - ve yeniden açılabilen adam gibi programlar için tmux pane_current_command. Denetim noktası bence çok karmaşık, ancak her durumda araştırılmaya değer.
John P,

@ bruno-sutic eklentiniz (tmux-resurrect) ile tmux-coninuum arasındaki fark nedir?
lyon,

Şu anda çalışabilmesi için böyle devam etmem gerekiyordu github.com/tmux-plugins/tmux-continuum/blob/master/docs/…
rofrol

10

tmuxinator , Ruby'de yazılmış ve tmux oturumlarını kolaylıkla oluşturmak ve yönetmek için kullanılabilecek bir araçtır. Daha sonra tmux oturumu olarak başlatılabilecek bir proje oluşturmak için kullanılabilir.


5

Burada bulunan bu kısmi çözümü göz önünde bulundurun

Yazar, tmux oturumunun durumunu bir sunucu yeniden başlattıktan sonra sürdürmek için tmux oturumunun geçmişini kaydeden bir işlev yaratır.


17
Ne dediklerini gönderebilir misiniz? Bağlantılar çürümeye başlayabilir.
cpast

1
@cpast: Bu doğru, ancak yorumlar da çürümeye başlayabilir. Her ikisini de vermek için :)
danielpops 21:16

6
@greg Bağlantınız 404
rofrol

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.