מה זה tmux ולמה מתכנתים אוהבים אותו¶
מכירים את הרגע הזה - אתם מחוברים בחיבור SSH לשרת מרוחק, מריצים תהליך שלוקח שעה, והמחשב הנייד נרדם, או ה-WiFi מתנתק לשנייה, וכל התהליך פשוט נעלם. כל מה שהרצתם, כל הפלט שהצטבר, הכל נמחק כאילו לא היה. tmux קיים בדיוק כדי שזה לעולם לא יקרה לכם שוב.
הבעיה - חיבור שנופל ותהליך שנעלם איתו¶
כשמריצים פקודה בטרמינל דרך SSH, התהליך הזה בדרך כלל קשור לחיים של החיבור עצמו. ברגע שה-SSH מתנתק - בגלל רשת לא יציבה, מחשב שנרדם, או פשוט כי סגרתם את הלפטופ - התהליך שרץ בתוך אותו חיבור מקבל אות שאומר לו להיסגר, וכל מה שהוא עשה עד עכשיו הולך לאיבוד. זה הרסני במיוחד כשמדובר בתהליכים ארוכים - בנייה שלוקחת שעה, סקריפט שמעבד קבצים גדולים, אימון מודל.
הבעיה השנייה, פחות דרמטית אבל מעצבנת לא פחות, היא שחיבור SSH רגיל נותן רק חלון טרמינל אחד. אם רוצים לראות לוגים בזמן אמת בזמן שעורכים קובץ, צריך לפתוח חיבור SSH נוסף בחלון נפרד.
sessions, windows ו-panes¶
tmux הוא terminal multiplexer - כלי שרץ בתוך הטרמינל ומאפשר לנהל כמה "מרחבי עבודה" בתוך חיבור אחד. המושג המרכזי הוא session - הפעלה שרצה על השרת עצמו, לא על המחשב שלכם. בתוך session אפשר לפתוח כמה windows, כל אחד כמו טאב נפרד, ובתוך כל window אפשר לפצל ל-panes - כמה חלונות טרמינל קטנים יותר, אחד ליד השני או אחד מעל השני, כולם באותו מסך.
מה שחשוב להבין הוא שה-session הזה חי על השרת, לא אצלכם על המחשב. זה ההבדל המהותי מכל דבר אחר.
detach ו-attach - הקסם האמיתי¶
הפיצ'ר שהופך את tmux מנוחות לכלי חיוני הוא היכולת להתנתק - detach - מ-session בלי לסגור אותו. לוחצים על צירוף מקשים, וכל מה שרץ בתוך ה-session ממשיך לרוץ על השרת, גם אחרי שהחיבור ל-SSH נסגר לגמרי. מחר, בעוד שעה, מכל מחשב אחר - פשוט מתחברים לשרת ומריצים פקודת attach, וה-session מחכה בדיוק כמו שהשארתם אותה, עם כל הפלט, כל התהליכים הרצים, הכל.
זה אומר שאפשר להתחיל תהליך ארוך, להתנתק, לסגור את הלפטופ, לנסוע הביתה, ולהתחבר מאוחר יותר לבדוק את התוצאה - בלי לדאוג שההתנתקות תפיל את התהליך.
שימושים יומיומיים¶
השימוש הכי נפוץ הוא בדיוק מה שתיארנו - להריץ תהליך ארוך, סריקה, בנייה, אימון, ולהתנתק בלי חשש שהוא ייפול. שימוש נפוץ נוסף הוא פיצול panes כדי לעבוד ולעקוב אחרי לוגים בו זמנית - pane אחד שמריץ tail -f על קובץ לוג, ופיצול שני שבו עובדים או מריצים פקודות, הכל על אותו מסך בלי לקפוץ בין חלונות.
מי שעובד עם כמה שרתים בו זמנית גם נהנה מהיכולת לפתוח window נפרד לכל שרת בתוך אותה session, ולעבור ביניהם בקיצור מקלדת אחד, במקום לנהל כמה חיבורי SSH נפרדים בכמה חלונות טרמינל.
מלכודת נפוצה¶
הטעות הכי נפוצה של מתחילים היא לבלבל בין סגירת חלון הטרמינל לבין יציאה מה-session בצורה נכונה. אם סוגרים את חלון הטרמינל בלי לעשות detach כמו שצריך, לפעמים זה עלול לגרום להתנהגות לא צפויה. כדאי מההתחלה להתרגל לצירוף המקשים של detach, ולא סתם לסגור את החלון. טיפ נוסף - שווה לתת שמות ל-sessions במקום להסתמך על מספרים, כדי שכשחוזרים לשרת אחרי כמה ימים, קל לזכור איזה session שייך לאיזה פרויקט.
מי שרוצה להעמיק בעבודה מול שרתים מרוחקים ובתשתית צד שרת בכלל, מוזמן להעיף מבט על קורס צד שרת.
tmux הוא אחד מהכלים הפשוטים האלה שברגע שמתרגלים אליהם, קשה לדמיין איך עבדתם בלעדיהם. אם אתם עובדים מול שרתים מרוחקים בקביעות, זה אחד הדברים הראשונים שכדאי להתקין.