چطور پروسه رو با nohup و screen فعال نگه داریم

چطور پروسه رو با nohup و screen فعال نگه داریم

وقتی با SSH به سرور وصل میشی و یه پروسه رو اجرا میکنی اگه اتصال قطع بشه یا پنجره ترمینال رو ببندی اون پروسه هم کیل میشه این برای کارایی مثل آپلود فایل حجیم بکاپ گیری طولانی یا اجرای یه اسکریپت طولانی فاجعست

nohup و screen دو تا راه حل ساده و کاربردی برای این مشکلن باهاشون میتونی پروسه رو طوری اجرا کنی که حتی بعد از قطع SSH هم به کارش ادامه بده


nohup چیه و چطور کار می‌کنه؟

nohup (No Hang Up) یه دستور سادست که پروسه رو از ترمینال جدا میکنه یعنی پروسه دیگه به ترمینال وابسته نیست و با بسته شدن ترمینال یا قطع SSH نمیمیره

استفاده ساده:

nohup command &

یه مثال واقعی:

nohup python3 backup.py &

وقتی این دستور رو میزنی خروجی برنامه توی فایل nohup.out ذخیره میشه پروسه توی بک‌گراند اجرا میشه و اگه SSH قطع بشه به کارش ادامه میده

چک کردن خروجی:

tail -f nohup.out

دیدن پروسه های در حال اجرا:

jobs
ps aux | grep python3

خروجی رو به فایل دلخواه بفرستیم:

nohup python3 backup.py > backup.log 2>&1 &

اینجا خروجی عادی و خطاها هر دو توی backup.log ذخیره میشن


nohup کی به درد میخوره؟

یه دستور یا اسکریپت داری که میدونی چقدر طول میکشه

نمیخوای بعدا برگردی و وضعیتش رو چک کنی

فقط میخوای پروسه توی بک گراند بمونه و کارش رو تموم کنه

محدودیت nohup: بعد از اجرا دیگه نمیتونی برگردی و ببینی پروسه توی چه وضعیتیه فقط خروجی رو میتونی بخونی

screen چیه و چطور کار میکنه؟

screen یه ابزار قدرتمندتره مثل یه ترمینال مجازی که توی بک گراند باز میمونه میتونی توش پروسه اجرا کنی ازش جدا بشی (detach) و بعدا دوباره بهش وصل بشی (attach)

نصب screen:

sudo apt install screen

ساخت یه screen جدید:

screen -S myscript

الان یه ترمینال جدید باز میشه هر چی اینجا اجرا کنی حتی با قطع SSH هم میمونه

اجرای پروسه توی screen:

python3 long_script.py

جدا شدن از screen (بدون بستن پروسه):

Ctrl + A سپس D

برمیگردی به ترمینال اصلی ولی پروسه توی screen هنوز در حال اجراست

دیدن لیست screen های فعال:

screen -ls

وصل شدن دوباره به screen:

screen -r myscript

برمی‌گردی همون جایی که بودی و میتونی خروجی پروسه رو ببینی

کشتن یه screen:

screen -XS myscript quit

یا وقتی به screen وصلی exit بزن

screen کی به درد می‌خوره؟

می‌خوای بعدا برگردی و ببینی پروسه توی چه وضعیتیه

نیاز داری با پروسه تعامل کنی (مثلا ورودی بدی)

چندتا پروسه مختلف رو همزمان مدیریت میکنی

میخوای خروجی پروسه رو زنده ببینی نه از روی فایل لاگ

 amir

amir

برنامه نویس python, php طراح سایت