Screen در لینوکس چیست؟ آموزش کار با Screen و مدیریت Sessionها

زمانی که از طریق SSH به یک سرور لینوکس متصل میشوید، اجرای بعضی از دستورات و پردازشها ممکن است زمان زیادی طول بکشد. در چنین شرایطی اگر اتصال SSH به هر دلیلی قطع شود، ممکن است پردازشی که در حال اجرا است نیز متوقف شود. این اتفاق بهخصوص هنگام دانلود فایلهای حجیم، نصب نرمافزار، اجرای اسکریپتها یا انجام پردازشهای طولانی میتواند دردسرساز باشد.
ابزار Screen یکی از راهکارهای کاربردی لینوکس برای جلوگیری از این مشکل است. با استفاده از Screen میتوانید یک نشست ترمینال ایجاد کنید که حتی پس از قطع اتصال SSH نیز به فعالیت خود ادامه میدهد. به این ترتیب، میتوانید از سرور جدا شوید و بعدا دوباره به همان نشست متصل شوید و ادامه کار را مشاهده کنید.
در این مقاله با Screen، نحوه نصب و ایجاد نشست، جدا شدن از آن، بازگشت به نشستهای قبلی و دستورات کاربردی آن آشنا میشویم.
Screen چیست؟
Screen یک ابزار مدیریت نشستهای ترمینال در لینوکس است که به شما اجازه میدهد یک یا چند نشست مستقل در داخل ترمینال ایجاد کنید. مهمترین ویژگی Screen این است که اجرای پردازشها را از اتصال فعلی ترمینال جدا میکند.
برای مثال، فرض کنید از طریق SSH به یک سرور متصل شدهاید و یک پردازش طولانی را اجرا کردهاید. اگر اینترنت شما قطع شود یا پنجره ترمینال را ببندید، در حالت عادی ممکن است پردازش نیز متوقف شود. اما اگر این پردازش را داخل یک نشست Screen اجرا کرده باشید، نشست روی سرور باقی میماند و پردازش به اجرای خود ادامه میدهد.
بعدا میتوانید دوباره از طریق SSH به سرور متصل شوید و به همان Screen برگردید. بنابراین، Screen برای کارهایی که اجرای آنها زمان زیادی میبرد، ابزار بسیار کاربردی است.
چرا باید از Screen در لینوکس استفاده کنیم؟
یکی از مهمترین کاربردهای Screen، جلوگیری از متوقف شدن پردازشها در زمان قطع اتصال SSH است. اتصال SSH به اینترنت و شبکه وابسته است و هرگونه اختلال در این ارتباط میتواند باعث بسته شدن نشست ترمینال شود.
Screen این وابستگی را کاهش میدهد. پردازش داخل یک نشست مستقل روی سرور اجرا میشود و قطع شدن اتصال شما باعث از بین رفتن آن نشست نخواهد شد.
برای مثال، اجرای یک اسکریپت طولانی، دانلود یک فایل بزرگ یا انجام عملیات مدیریتی روی سرور ممکن است چند ساعت زمان ببرد. در چنین شرایطی لازم نیست پنجره SSH را برای تمام این مدت باز نگه دارید. میتوانید پردازش را داخل Screen اجرا کنید، از نشست خارج شوید و بعدا دوباره به آن متصل شوید.
Screen همچنین امکان ایجاد چند نشست مستقل را فراهم میکند. بنابراین میتوانید برای کارهای مختلف نشستهای جداگانه داشته باشید و هرکدام را در زمان مورد نیاز مدیریت کنید.
نصب Screen در لینوکس
در بعضی از توزیعهای لینوکس، Screen به صورت پیشفرض نصب است. برای بررسی نصب بودن آن میتوانید دستور زیر را اجرا کنید:
screen --version
اگر Screen روی سیستم نصب نباشد، روش نصب آن به توزیع لینوکس بستگی دارد.
نصب Screen در Debian و Ubuntu
در توزیعهای مبتنی بر Debian مانند Ubuntu میتوانید از مدیر بسته APT استفاده کنید:
sudo apt update sudo apt install screen
نصب Screen در CentOS و RHEL
در نسخهها و توزیعهایی که از مدیر بسته YUM استفاده میکنند، نصب Screen با دستور زیر انجام میشود:
sudo yum install screen
در نسخههای جدیدتر برخی توزیعهای مبتنی بر RHEL که از DNF استفاده میکنند نیز میتوانید Screen را با دستور زیر نصب کنید:
sudo dnf install screen
چگونه یک Screen ایجاد کنیم؟
بعد از نصب Screen، ایجاد یک نشست جدید بسیار ساده است. کافی است دستور زیر را اجرا کنید:
screen
بعد از اجرای این دستور، وارد یک نشست جدید میشوید. محیط آن تقریبا مشابه همان ترمینال معمولی لینوکس است و میتوانید دستورات مورد نیاز خود را اجرا کنید.
تفاوت اصلی این است که این ترمینال اکنون داخل یک نشست Screen قرار دارد. بنابراین میتوانید از آن جدا شوید، بدون اینکه نشست یا پردازشهای در حال اجرای آن متوقف شوند.
چگونه از Screen خارج شویم بدون اینکه پردازش متوقف شود؟
فرض کنید داخل Screen یک پردازش طولانی در حال اجرا است و میخواهید اتصال SSH را ببندید، اما نمیخواهید پردازش متوقف شود.
برای جدا شدن از Screen، کلیدهای زیر را به ترتیب فشار دهید:
Ctrl + A سپس D
با انجام این کار از نشست Screen جدا میشوید و به ترمینال اصلی سرور بازمیگردید.
نکته مهم این است که جدا شدن از Screen به معنی متوقف شدن آن نیست. نشست همچنان روی سرور فعال است و پردازشهایی که داخل آن اجرا کردهاید نیز ادامه پیدا میکنند.
مشاهده Screenهای فعال
برای مشاهده نشستهای Screen موجود روی سرور، از دستور زیر استفاده کنید:
screen -ls
برای مثال، ممکن است خروجی چیزی شبیه این باشد:
There are screens on: 7849.pts-0.server (Detached) 5561.pts-0.server (Detached) 2 Sockets in /run/screen/S-user
در این خروجی هر نشست یک شناسه دارد. در مثال بالا، شناسه نشست اول 7849 و شناسه نشست دوم 5561 است.
وضعیت Detached نیز به این معنی است که نشست در حال اجرا است، اما در حال حاضر ترمینالی به آن متصل نیست.
چگونه دوباره به یک Screen متصل شویم؟
اگر قبلا از یک Screen جدا شده باشید، میتوانید در هر زمان دوباره به آن متصل شوید.
برای این کار ابتدا با دستور screen -ls نشستهای موجود را مشاهده کنید و سپس شناسه نشست مورد نظر را به دستور زیر بدهید:
screen -r 7849
با اجرای این دستور، دوباره وارد همان نشست میشوید و میتوانید وضعیت پردازشی را که داخل آن اجرا کرده بودید مشاهده کنید.
این قابلیت یکی از مهمترین دلایل استفاده از Screen در مدیریت سرور است. حتی اگر اتصال SSH شما قطع شده باشد، پس از اتصال مجدد میتوانید به همان محیط کاری بازگردید.
ایجاد Screen با نام دلخواه
اگر چند نشست مختلف روی سرور داشته باشید، استفاده از شناسه عددی میتواند کمی گیجکننده باشد. برای مدیریت بهتر میتوانید هنگام ایجاد Screen یک نام مشخص برای آن تعیین کنید.
برای این کار از دستور زیر استفاده کنید:
screen -S download
در این مثال، نام نشست download انتخاب شده است. بعدا میتوانید با همین نام آن را شناسایی کنید.
برای بازگشت به این نشست نیز میتوانید از دستور زیر استفاده کنید:
screen -r download
نامگذاری نشستها زمانی کاربرد بیشتری دارد که به صورت همزمان چند پردازش مختلف روی سرور اجرا میکنید. برای مثال میتوانید یک Screen برای دانلود، یک Screen برای اجرای اسکریپت و یک Screen دیگر برای بررسی لاگهای سرور داشته باشید.
چگونه یک Screen را ببندیم؟
اگر دیگر به یک نشست Screen نیازی ندارید و میخواهید آن را به طور کامل ببندید، ابتدا وارد آن شوید و سپس دستور زیر را اجرا کنید:
exit
با اجرای exit، نشست Screen بسته میشود و در صورتی که پردازشی دیگری در آن در حال اجرا نباشد، نشست نیز از فهرست Screenهای فعال حذف خواهد شد.
همچنین میتوانید از داخل نشست کلیدهای Ctrl + D را فشار دهید که عملکرد مشابهی دارد.
توجه داشته باشید که جدا شدن از Screen با بستن آن تفاوت دارد. استفاده از Ctrl + A و سپس D فقط شما را از نشست جدا میکند، اما Screen همچنان فعال باقی میماند. در مقابل، اجرای exit نشست را خاتمه میدهد.
دستورات پرکاربرد Screen
Screen دستورات و میانبرهای مختلفی دارد، اما برای استفاده معمول از آن نیازی نیست همه آنها را حفظ کنید. چند مورد از کاربردیترین دستورات عبارتند از:
screen
ایجاد یک نشست جدید.
screen -S name
ایجاد یک نشست جدید با نام دلخواه.
screen -ls
نمایش نشستهای فعال.
screen -r ID
اتصال مجدد به یک نشست موجود.
screen -d -r ID
جدا کردن نشست از یک ترمینال دیگر و اتصال به آن از ترمینال فعلی.
screen -S name -X quit
بستن یک نشست مشخص با استفاده از نام آن.
چند Screen به صورت همزمان
یکی دیگر از قابلیتهای کاربردی Screen، امکان ایجاد چند نشست به صورت همزمان است. هر نشست محیط مستقلی دارد و میتواند برای اجرای یک کار متفاوت استفاده شود.
برای مثال، میتوانید سه نشست با نامهای مختلف ایجاد کنید:
screen -S download screen -S backup screen -S monitor
در یک نشست فایل دانلود کنید، در نشست دیگر عملیات پشتیبانگیری را اجرا کنید و در نشست سوم وضعیت سرور را بررسی کنید.
هر زمان نیز که نیاز داشته باشید میتوانید با اجرای screen -ls نشستهای موجود را مشاهده کرده و به نشست مورد نظر خود متصل شوید.
تفاوت Screen با ترمینال معمولی
در یک ترمینال معمولی، اجرای پردازش به همان نشست ترمینال وابسته است. اگر اتصال SSH قطع شود یا نشست ترمینال از بین برود، پردازش نیز ممکن است متوقف شود.
Screen یک لایه جداگانه بین ترمینال و پردازش ایجاد میکند. به همین دلیل حتی اگر اتصال SSH قطع شود، نشست Screen روی سرور باقی میماند و پردازشهای داخل آن میتوانند به کار خود ادامه دهند.
البته Screen جایگزین مدیریت صحیح پردازشها در لینوکس نیست و همه برنامهها نیز رفتار یکسانی در هنگام قطع اتصال ندارند. با این حال، برای اجرای بسیاری از دستورات و کارهای طولانی روی سرور، راهکاری ساده و کاربردی محسوب میشود.
Screen چه زمانی کاربرد دارد؟
Screen بیشتر زمانی مفید است که قرار است یک عملیات طولانی روی سرور انجام دهید و نمیخواهید قطع شدن اتصال SSH باعث توقف آن شود.
اجرای اسکریپتهای طولانی، دانلود و انتقال فایلهای حجیم، کامپایل نرمافزار، انجام عملیات پشتیبانگیری و اجرای برخی برنامههای خط فرمان از جمله مواردی هستند که Screen میتواند در آنها مفید باشد.
همچنین اگر مدیر سرور هستید و معمولا به چند سرور از طریق SSH متصل میشوید، استفاده از نشستهای نامگذاریشده میتواند مدیریت کارهای همزمان را سادهتر کند.
جمعبندی
Screen یکی از ابزارهای ساده اما کاربردی لینوکس برای مدیریت نشستهای ترمینال است. مهمترین مزیت آن این است که میتوانید یک پردازش را روی سرور اجرا کنید، از نشست جدا شوید و بدون نگرانی از قطع شدن اتصال SSH، بعدا دوباره به همان محیط بازگردید.
با چند دستور اصلی مانند screen، screen -ls و screen -r میتوان بیشتر نیازهای معمول را برطرف کرد. همچنین امکان نامگذاری نشستها و اجرای چند Screen به صورت همزمان، این ابزار را برای مدیریت پرداز3شهای طولانی و کارهای همزمان روی سرور کاربردیتر میکند.
سوالات متداول
Screen ابزاری برای ایجاد و مدیریت نشستهای ترمینال در لینوکس است که اجازه میدهد پردازشها حتی پس از قطع اتصال SSH نیز به اجرای خود ادامه دهند.
پس از نصب Screen، با اجرای دستور screen یک نشست جدید ایجاد میشود. همچنین میتوانید با استفاده از screen -S برای نشست خود نام مشخصی تعیین کنید.
برای جدا شدن از یک نشست Screen بدون متوقف کردن پردازش، کلیدهای Ctrl + A و سپس D را فشار دهید. با این کار نشست در پسزمینه فعال باقی میماند.
برای مشاهده نشستهای فعال میتوانید دستور screen -ls را اجرا کنید. این دستور فهرست نشستهای موجود و وضعیت آنها را نمایش میدهد.
ابتدا شناسه نشست را با screen -ls پیدا کنید و سپس با اجرای screen -r و شناسه مورد نظر، دوباره به آن متصل شوید.
خیر. اگر پردازش داخل یک نشست Screen اجرا شده باشد، قطع اتصال SSH باعث بسته شدن آن نشست نمیشود و پردازش میتواند به اجرای خود ادامه دهد.
برای بستن یک نشست، ابتدا وارد آن شوید و سپس دستور exit را اجرا کنید. در صورتی که پردازش دیگری در نشست باقی نمانده باشد، Screen نیز بسته میشود.
بله. میتوانید چند نشست Screen ایجاد کنید و برای هرکدام پردازش متفاوتی اجرا کنید. استفاده از نامهای مشخص برای نشستها، مدیریت آنها را سادهتر میکند.





























عالی بود
ممنون از بازخورد مثبت شما.