रिबूट के बाद tmux सेशन को पुनर्स्थापित करें


255

क्या tmux सेशन को बचाने का कोई तरीका है? दूसरे शब्दों में, अगर मैं कंप्यूटर को रिबूट करता हूं, तो क्या मैं हमेशा सत्र खो दूंगा?


1
आप एक विकल्प के रूप में डिस्क पर हाइबरनेट कर सकते हैं
5:23 पर Métt Frëëman

36
हाइबरनेटिंग आपके कंप्यूटर को लगातार चालू रखने का एक विकल्प है, रिबूट नहीं।
१०:३१ पर १२

5
@ शेपनर: ऐसे दिन होते हैं जब*** System restart required ***
karatedog

2
@karatedog हां, इसलिए हम दोनों सहमत हैं कि रिबूट पर अपने tmux सत्र को खोने के लिए हाइबरनेशन समाधान नहीं है।
चेपर

जवाबों:


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-session के साथ । यह रिटर्न कोड की जाँच करता है। यदि पहले से ही उस नाम के साथ एक सत्र चल रहा है, तो यह "यदि" चक्र को छोड़ देता है और सीधे अंतिम पंक्ति में जाता है, जहां यह सत्र में संलग्न होता है। अन्यथा, यह एक सत्र बनाता है और इसे कुछ चाबियाँ भेजता है (अभी के लिए एक यादृच्छिक स्क्रिप्ट चला रहा है)। फिर यह "यदि" ब्लॉक और बाहर निकलता है।

यह बहुत ही तुच्छ नमूना है। आप संलग्न करने से पहले कई विंडो, पैन और इस तरह बना सकते हैं।

हालांकि यह वही चीज नहीं होगी जो आपने मांगी थी। यदि आप सत्र में कोई भी परिवर्तन करते हैं, उदाहरण के लिए, आप एक विंडो का नाम बदलते हैं और उसमें एक नया फलक बनाते हैं, यदि आप रिबूट करते हैं तो निश्चित रूप से उन परिवर्तनों को सहेजा नहीं जाएगा।

कुछ उपकरण हैं जो स्क्रिप्टिंग सत्र की प्रक्रिया को आसान बनाते हैं, हालांकि मैं चीजों को मैन्युअल रूप से करना पसंद करता हूं (मुझे लगता है कि यह अधिक बहुमुखी है)। वे उपकरण हैं Tmuxinator और Teamocil

मेरा मुख्य स्रोत "द प्रोगैमिक बुकशेल्फ़" Tmux पुस्तक थी।


1
अगर मैं 5 फाइलें खुली के साथ एक सत्र को बहाल करना चाहता हूं तो ऐसा कुछ नहीं होगा। ऐसा करने का कोई तरीका नहीं?
चॉवि

4
Tmux आपके द्वारा चलाए जा सकने वाली प्रक्रियाओं की स्थिति के बारे में कुछ भी नहीं जानता है। आप 'सेंड-की' या 'स्प्लिट-विंडो' कमांड होने से एक ही फाइल को खोल सकते हैं, 'vim file1 file2 file3' हो सकती है या अपने एडिटर के सेशन मैनेजमेंट (vim -S और
लाइक

tmux send-keys ...लाइन का उद्देश्य क्या है ?
डोमिनीकस मोस्टस्किस

2
@DominykasMostauskis जो कमांड निर्दिष्ट सत्र के लिए मुख्य प्रेस भेजता है । यह सत्र में प्रवेश करने और कीबोर्ड से उन बहुत कुंजियों को इनपुट करने जैसा है। इस मामले में, आप "~ / bin / script" भेजें और उसके बाद एंटर करें।
डकैती

1
संयोजन some command; if [ $? != 0 ]; then .....लिखने के लिए (और पढ़ने के लिए) और अधिक आसान है: if ! some command; then .....
फ़ोनीनी

117

मैंने एक साधारण बैश स्क्रिप्ट लिखी जो प्रत्येक में खुले tmux सेशन, विंडो और करंट वर्किंग डाइरेक्टरीज़ को बनाए रखती है।

इसे मैन्युअल रूप से या समय-समय पर क्रोन से कॉल करें (क्योंकि आप भूल सकते हैं):

tmux-session save

इसे लिखेंगे ~/.tmux-session। रिबूट के बाद उन्हें पुनर्स्थापित करें जैसे:

tmux-session restore

मुझे यह कई सौ लाइन लंबी पर्ल स्क्रिप्ट से बहुत बेहतर लगता है।


क्या यह केवल तभी है जब आपके पास एक tmux सत्र है?
सत्रह

86

मैंने एक tmux plugin लिखा है जो आपको पूरा tmux वातावरण बचाने और बाद में इसे पुनर्स्थापित करने में सक्षम बनाता है। यह वास्तव में विस्तृत होने का प्रयास करता है ताकि आपको ऐसा एहसास हो कि आपने कभी भी tux को नहीं छोड़ा है।

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

अद्यतन: अब एक tmux-Continum प्लगइन है जो tmux पर्यावरण की स्वचालित पृष्ठभूमि को बचाता है। वैकल्पिक रूप से यह भी * स्वचालित रूप से * कंप्यूटर रिबूट के बाद tmux env को पुनर्स्थापित करता है।


जैसे ही मैंने अपना "उत्तर" पोस्ट किया उसी लिंक के साथ मैंने देखा - "do'h!" अपने प्लगइन को क्या कहा जाता है, यह याद रखने की कोशिश करते हुए यह मिला।
फतस्कैट

यह प्लगइन खराब नहीं है, लेकिन इसने मेरे सभी कार्यक्रमों को बहाल नहीं किया। आपके डॉक्स को और अधिक पढ़ेंगे और शायद गितुब पर एक समस्या प्रस्तुत करेंगे।
अर्ने

@ कार्यक्रम के आधार पर, इसके लिए प्रोग्राम चेकपॉइंटिंग की आवश्यकता हो सकती है। इसके बजाय, मैं आपके कार्यक्रमों को पुनर्स्थापित करने के लिए सलाह दूंगा - लगातार .vimrc फ़ाइलें और vim के लिए कर्सर स्थिति, आदि - और आदमी जैसे कार्यक्रमों के लिए tmux pane_current_command संग्रहीत करना जो फिर से खोला जा सकता है। मेरी राय में चेकपॉइंटिंग बहुत जटिल है, लेकिन किसी भी मामले में देखने के लायक है।
जॉन पी।

@ bruno-sutic आपके प्लगइन (tmux-resurrect) और tmux-conunuum के बीच अंतर क्या है?
lony

वर्तमान में मुझे इस तरह से निरंतर काम करने की आवश्यकता है ताकि यह काम कर सके github.com/tmux-plugins/tmux-continuum/blob/master/docs/…
rofrol

10

tmuxinator रूबी में लिखा गया एक उपकरण है, जिसका उपयोग आसानी से tmux सत्र बनाने और प्रबंधित करने के लिए किया जा सकता है। इसका उपयोग एक प्रोजेक्ट बनाने के लिए किया जा सकता है, जिसे बाद में tmux सेशन के रूप में तुरंत तैयार किया जा सकता है।


5

इस आंशिक समाधान पर विचार करें

लेखक एक फ़ंक्शन बनाता है जो tmux सत्र के इतिहास को सहेजता है ताकि tmux सत्र की स्थिति को सर्वर रिबूट के बाद जारी रखा जा सके।


17
क्या आप कृपया बता सकते हैं कि वे क्या कहते हैं? लिंक सड़ सकते हैं।
22

1
@ सीपी: यह सच है, लेकिन टिप्पणी भी सड़ सकती है। दोनों को देने के लिए सर्वश्रेष्ठ :)
danielpops

6
@ आपकी लिंक 404
rofrol

0

मैं सत्रों को फिर से बनाने के लिए https://github.com/jimeh/tmuxifier का सफलतापूर्वक उपयोग करता हूं । यह बिना रूबी के स्थापित किया जा सकता है, बस गिट का उपयोग करके।

नमूने बहुत आत्म व्याख्यात्मक हैं, उदाहरण के लिए: https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.