אם אתם עובדים עם 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 או שלא נדע מה קרה עם הפרוסס שהרצנו כי הסשן התנתק/ האינטרנט נפל/ המחשב עשה ריסטארט/ נשרף באש האבדון.
אני מודה מאוד ללירן טל ולתמיר מור על פקיחת העיניים בנושא.
7 תגובות
ויש גם את tmux שיודע לעשות עוד כמה טריקים
https://tmux.github.io/
אכן כן, אני לא משתמש בה באופן אישי, אבל תודה על התגובה והקישור! 🙂
tmux
יש עוד מלא פונקציות לscreen. ניתן לראות ב man.
אכן, פקודה כיפית ויעילה!
יותר פשוט… לא צריך להתקין כלום… רושמים nohup בתחילת הפקודה שרוצים להריץ ו & בסוף… התהליך ירוץ ברקע גם אם החלון נסגר וכל הפלט ירשם לקובץ nohup.log
תודה רבה על התגובה! screens גם מאפשרת לך להריץ כמה 'מסכים' במקביל. אבל זו הערה חשובה 🙂
בכיף! אגב גם עם nohup ניתן להריץ כמה במקביל… כל תהליך ירשום את הפלט שלו לקובץ נפרד (nohup1.log, nohup2.log וכו') ואפשר לקרוא כל קובץ במקביל עם tail -f