क्या tmux सेशन को बचाने का कोई तरीका है? दूसरे शब्दों में, अगर मैं कंप्यूटर को रिबूट करता हूं, तो क्या मैं हमेशा सत्र खो दूंगा?
*** System restart required ***
क्या tmux सेशन को बचाने का कोई तरीका है? दूसरे शब्दों में, अगर मैं कंप्यूटर को रिबूट करता हूं, तो क्या मैं हमेशा सत्र खो दूंगा?
*** System restart required ***
जवाबों:
हाँ, यदि आप कंप्यूटर को रिबूट करते हैं तो आप सत्रों को खो देंगे। सत्रों को सहेजा नहीं जा सकता। लेकिन, उन्हें स्क्रिप्टेड किया जा सकता है। वास्तव में सबसे अधिक कुछ सत्रों को स्क्रिप्ट करने के लिए है ताकि आप उन्हें फिर से बना सकें। उदाहरण के लिए, यहां एक सत्र बनाने के लिए एक तुच्छ शेल स्क्रिप्ट है:
#!/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 पुस्तक थी।
tmux send-keys ...
लाइन का उद्देश्य क्या है ?
some command; if [ $? != 0 ]; then .....
लिखने के लिए (और पढ़ने के लिए) और अधिक आसान है: if ! some command; then .....
।
मैंने एक साधारण बैश स्क्रिप्ट लिखी जो प्रत्येक में खुले tmux सेशन, विंडो और करंट वर्किंग डाइरेक्टरीज़ को बनाए रखती है।
इसे मैन्युअल रूप से या समय-समय पर क्रोन से कॉल करें (क्योंकि आप भूल सकते हैं):
tmux-session save
इसे लिखेंगे ~/.tmux-session
। रिबूट के बाद उन्हें पुनर्स्थापित करें जैसे:
tmux-session restore
मुझे यह कई सौ लाइन लंबी पर्ल स्क्रिप्ट से बहुत बेहतर लगता है।
मैंने एक tmux plugin लिखा है जो आपको पूरा tmux वातावरण बचाने और बाद में इसे पुनर्स्थापित करने में सक्षम बनाता है। यह वास्तव में विस्तृत होने का प्रयास करता है ताकि आपको ऐसा एहसास हो कि आपने कभी भी tux को नहीं छोड़ा है।
https://github.com/tmux-plugins/tmux-resurrect
अद्यतन: अब एक tmux-Continum प्लगइन है जो tmux पर्यावरण की स्वचालित पृष्ठभूमि को बचाता है। वैकल्पिक रूप से यह भी * स्वचालित रूप से * कंप्यूटर रिबूट के बाद tmux env को पुनर्स्थापित करता है।
tmuxinator रूबी में लिखा गया एक उपकरण है, जिसका उपयोग आसानी से tmux सत्र बनाने और प्रबंधित करने के लिए किया जा सकता है। इसका उपयोग एक प्रोजेक्ट बनाने के लिए किया जा सकता है, जिसे बाद में tmux सेशन के रूप में तुरंत तैयार किया जा सकता है।
इस आंशिक समाधान पर विचार करें
लेखक एक फ़ंक्शन बनाता है जो tmux सत्र के इतिहास को सहेजता है ताकि tmux सत्र की स्थिति को सर्वर रिबूट के बाद जारी रखा जा सके।
मैं सत्रों को फिर से बनाने के लिए https://github.com/jimeh/tmuxifier का सफलतापूर्वक उपयोग करता हूं । यह बिना रूबी के स्थापित किया जा सकता है, बस गिट का उपयोग करके।
नमूने बहुत आत्म व्याख्यात्मक हैं, उदाहरण के लिए: https://github.com/jimeh/tmuxifier/blob/master/examples/example.session.sh