עובדים מול שרת מרוחק? אל תאבדו את החלון שלכם

אם אתם עובדים עם SSH על מנת להתחבר לשרת לינוקס מרוחק, אתם בדרך כלל תתחברו עם Putty ממחשב מבוסס חלונות או דרך SSH ממחשב לינוקס/מק – מה הבעיה? הבעיה היא שאם אתם מריצים תהליך ארוך ומאיזושהי סיבה ה-session שלכם מתנתק, אז אתם בבעיה. התהליך יכול להמשיך לרוץ, אבל אתם לא תדעו מה התוצאה שלו. או לחלופין, הרצתם פקודה כלשהי עם תוצאה שמופיע על המסך ואז פתאום המחשב המארח נסגר מסיבה מסוימת – לא תוכלו לראות את מה שהדפסתם והסשן המרוחק הלך לעזאזל.

אפשר לפתור את זה בקלות עם תוכנה קטנה וחמודה שנקראת screen שזמינה ללינוקס (גם פדורה וגם דביאן). קל מאוד להתקין אותה:

sudo apt-get install screen

ובפדורה:

yum install screen

אחרי ההתקנה, אנחנו נקליד scrren -v כדי לראות

$ screen -v
Screen version 4.00.03 (FAU) 23-Oct-06

אחרי שהתוכנה מותקנת, אפשר לעבוד. נכתוב screen ואז נראה שהמסך התחלף והוא נראה כמו חיבור SSH רגיל, אבל זה לא SSH רגיל אלא מסך שרץ על פרוסס עצמאי משל עצמו. אנחנו יכולים לכתוב בו, להריץ בו דברים וכו’. אם אנחנו רוצים לצאת מהפרוסס (אבל לתת לו לרוץ), אנחנו נלחץ על קונטרול A ואז D.
אנחנו נחזור ל-SSH הרגיל. שימו לב, הפרוסס עדיין רץ. בו אפשר לפתוח עוד screen (פשוט לכתוב screen) או דברים אחרים. אני רוצה לחזור ל-screen שפתחתי? אין קל מזה. אכתוב screen -ls ומייד אגלה רשימה של כל ה-screen הפתוחים:

There are screens on:
        2477.pts-0.server1      (Detached)
        2522.pts-0.server1      (Detached)
2 Sockets in /var/run/screen/S-root.

ליד כל screen יש מזהה מספרי. אם אני רוצה לעבור אל ה-screen אני יכול פשוט לכתוב

screen -r 2477

ואני מייד אחזור ל-session שלי, כולל ההיסטוריה, המסך והכל. אם יש פרוסס שרץ, אני אראה אותו. אפשר לעבור אל ה-screen הרלוונטי גם אם הסשן התנתק לחלוטין, אם המחשב שלי התפוצץ או אם התחברתי ממחשב אחר, אין שום בעיה, כל מה שצריך זה להקליד

screen -ls 

כדי לברר את המספר של ה-screen ואז:

screen -r XXXX

זה הכל, להזכירכם ה- screen -ls מראה לנו את הרשימה של ה-screen ו screen -r עם מספר מכניס אותי ל-screen הזה והוא לעולם לא ימות. הוא יישאר בחיים כל עוד המכונה באוויר. ואם אני רוצה להרוג את ה-screen? מאוד פשוט:

exit

יהרוג אותו ויחזיר אותי ל-session הראשי.

אם יש לי כמה screen פתוחים, אני יכול להכנס לאחד מהם ולעבור ביניהם באמצעות קונטרול A ואז P או N.

זהו! לעולם לא עוד נאבד session או שלא נדע מה קרה עם הפרוסס שהרצנו כי הסשן התנתק/ האינטרנט נפל/ המחשב עשה ריסטארט/ נשרף באש האבדון.

אני מודה מאוד ללירן טל ולתמיר מור על פקיחת העיניים בנושא.

כדאי תמיד להשאר מעודכנים! הרשמו לעדכונים של האתר במייל! - המייל יישלח כל יום ראשון בעשר בבוקר ויכיל אך ורק את המאמרים שהתפרסמו באינטרנט ישראל. ללא ספאם, ללא הצפות, ללא בלגנים. אם יש לכם טלגרם, בדקו את ערוץ הטלגרם של האתר שבו אני מעדכן על פוסטים חדשים 🙂

אהבתם? לא אהבתם? דרגו!

לא אהבתי בכלללא אהבתיבסדראהבתיאהבתי מאוד (6 הצבעות, ממוצע: 5.00 מתוך 5)


יאללה, שתפו :)

אל תשארו מאחור! יש עוד מה ללמוד!

7 comments on “עובדים מול שרת מרוחק? אל תאבדו את החלון שלכם
  1. יוגב הגיב:

    ויש גם את tmux שיודע לעשות עוד כמה טריקים
    https://tmux.github.io/

  2. אחד שיודע הגיב:

    tmux

  3. א הגיב:

    יש עוד מלא פונקציות לscreen. ניתן לראות ב man.
    אכן, פקודה כיפית ויעילה!

  4. שוהם הגיב:

    יותר פשוט… לא צריך להתקין כלום… רושמים nohup בתחילת הפקודה שרוצים להריץ ו & בסוף… התהליך ירוץ ברקע גם אם החלון נסגר וכל הפלט ירשם לקובץ nohup.log

    • רן בר-זיק הגיב:

      תודה רבה על התגובה! screens גם מאפשרת לך להריץ כמה ‘מסכים’ במקביל. אבל זו הערה חשובה 🙂

      • שוהם הגיב:

        בכיף! אגב גם עם nohup ניתן להריץ כמה במקביל… כל תהליך ירשום את הפלט שלו לקובץ נפרד (nohup1.log, nohup2.log וכו’) ואפשר לקרוא כל קובץ במקביל עם tail -f

כתיבת תגובה

האימייל לא יוצג באתר.

רישום