چگونه روند کار را بعد از پایان جلسه ssh ادامه دهیم؟


به جواب پذیرفته شده بروید




بیایید بگوییم که من یک فرآیند را از یک جلسه ssh شروع می کنم. آیا می توان جلسه ssh را در حالی که آن پردازش ها را بر روی دستگاه از راه دور اجرا می کنید خاتمه داد؟


668









15 :تعداد پاسخها


شما باید به دنبال گزینه های مدرن مانند tmux .

tmux به screen دلایل زیادی برتر است ، در اینجا فقط چند مثال آورده شده است:

  • ویندوز را می توان بین جلسه منتقل کرد و حتی به چندین جلسه وصل شد
  • ویندوز را می توان به صورت افقی و عمودی به صفحه ها تقسیم کرد
  • پشتیبانی از پایانه های رنگی UTF-8 و 256
  • بدون نیاز به ورود به جلسه ، جلسات را می توان از پوسته کنترل کرد

عملکرد اساسی

برای به دست آوردن عملکردهای مشابه همانطور که در پاسخ توصیه شده توضیح داده شد screen ، باید موارد زیر را انجام دهید:

  • ssh به دستگاه از راه دور
  • tmux با tmux وارد کردن در پوسته شروع کنید
  • فرآیند مورد نظر خود را در tmux جلسه آغازین شروع کنید
  • tmux جلسه را با تایپ کردن Ctrl+ bو جدا کنیدd

اکنون می توانید با خیال راحت از دستگاه از راه دور خارج شوید ، روند شما در داخل ادامه خواهد داشت tmux . هنگامی که دوباره برگشتید و می خواهید وضعیت روند خود را بررسی کنید می توانید از tmux attach آن برای tmux جلسه خود استفاده کنید .

اگر می خواهید چندین جلسه در کنار هم قرار بگیرید ، باید هر جلسه را با استفاده از Ctrl+ bو $ . می توانید لیستی از جلسات در حال اجرا را با استفاده از tmux list-sessions هم اکنون دریافت کنید و اکنون با دستور به جلسه در حال اجرا وصل شوید tmux attach-session -t <session-name> .

tmux می تواند کارهای بسیار پیشرفته تری نسبت به یک پنجره واحد در یک جلسه انجام دهد. برای اطلاعات بیشتر به صفحه man tmux یا tmux GitHub مراجعه کنید . به ویژه ، در اینجا سؤالی درباره تفاوتهای اصلی بین screen و tmux .


779



انتخاب 1: nohup

بهترین روش اغلب ساده ترین است.

 nohup long-running-command &
 

این به طور خاص برای این ساخته شده است ، حتی به مرحله برنامه ریزی نیز وارد شده است nohup.log .

 man nohup
 

گزینه 2: bg

اگر می خواهید برخی از کارهای در حال اجرا را "پس زمینه" کنید ، بهترین شرط شما این است که Ctrl+ Zسپس اجرا کنید

 bg
 

برای اینکه جدیدترین کار معلق خود را در پس زمینه قرار دهید ، به این امکان ادامه می دهد.

سپس سریع disown باید پس از ورود به سیستم روند کار را ادامه دهد.

screen و دیگران می توانند این کار را انجام دهند ، اما این چیزی نیست که آنها برای آن تلاش می کنند. من nohup برای کارهایی که می دانید می خواهید کنار بگذارید و bg کارهایی را که قبلاً انجام می دهید توصیه می کنید و نمی خواهید دوباره شروع کنید.

به خاطر داشته باشید ، هر دو خاص هستند. اگر از bash استفاده نمی کنید ، دستورات متفاوت هستند.


321



شما می توانید با استفاده از این کار را انجام دهید screen .

man screen برای اطلاعات بیشتر یا خواندن این صفحه نمایش صفحه ، تایپ کنید .

سناریوی ساده:

  • ssh در جعبه راه دور خود را. تایپ کنید screen سپس فرآیند مورد نظر خود را شروع کنید.

  • را فشار دهید Ctrl- Aسپس Ctrl- D. با این کار جلسه صفحه شما "جدا" می شود اما فرایندهای شما در حال اجرا می شوند. اکنون می توانید از جعبه راه دور خارج شوید.

  • اگر می خواهید بعداً برگردید ، دوباره وارد سیستم شوید و تایپ کنید screen -r این جلسه جلسه شما را از سر می گیرد و می توانید خروجی فرایند خود را ببینید.


212



صفحه نمایش و nohup راه بهتری است ، اما اگر مجبور هستید فرایندی را که بدون صفحه نمایش یا nohup در حال اجرا است جدا کنید ، می توانید دستور disown را اجرا کنید.

disown [-ar] [-h] [ jobspec … | pid … ]

بدون گزینه ، هر نوع کار را از جدول مشاغل فعال حذف کنید . در صورت -h انتخاب گزینه ، کار از جدول حذف نمی شود ، اما به گونه ای علامت گذاری شده است که اگر پوسته SIGHUP دریافت کند ، SIGHUP به کار ارسال نمی شود. اگر jobspec وجود ندارد، و نه -a و نه -r گزینه عرضه شده است، کار فعلی استفاده شده است. در صورت عدم ارائه شغل ، -a گزینه به معنای حذف یا علامت گذاری تمام مشاغل است. -r گزینه بدون jobspec استدلال عملیات در حال اجرا شغل محدود می کند.

با disown می توانید ترمینال را ببندید و روند کار را روی دستگاه اجرا کنید.


86



من در یک mV بزرگ گیر کرده بودم ، بنابراین در شرایطی نیستم که بتوانم روند کار را متوقف کنم ، صفحه تنظیم را شروع کنم و دوباره آن را شروع کنم. من با انجام مراحل زیر توانستم از جلسه ssh خارج شوم:

  1. ssh [server]
  2. فرمان
  3. Ctrl+Z
  4. bg
  5. رد کردن [پردازش pid اختیاری ، پیش فرض برای آخرین]
  6. خروج

مرحله 3 روند فعلی را متوقف می کند (به عنوان مثال فرمان "mv" من).
مرحله 4 روند متوقف شده را به پس زمینه می گذارد و آن را از سر می گیرد.
مرحله 5 به شما امکان می دهد روند کار را نفی کنید. ** برای به دست آوردن لیستی از مشاغل به سادگی jobs قبل تایپ کنید .


** در مورد رد کردن (از دفترچه راهنما):

 disown [-ar] [-h] [jobspec ... | pid ... ]
              Without  options,  remove  each jobspec from the table of active
              jobs.  If jobspec is not present, and neither the -a nor the  -r
              option  is  supplied, the current job is used.  If the -h option
              is given, each jobspec is not removed from  the  table,  but  is
              marked  so  that  SIGHUP  is  not  sent  to the job if the shell
              receives a SIGHUP.  If no jobspec is  supplied,  the  -a  option
              means  to  remove or mark all jobs; the -r option without a job‐
              spec argument restricts operation to running jobs.   The  return
              value is 0 unless a jobspec does not specify a valid job.
 

53



دو برنامه اصلی وجود دارد که می توانید برای حفظ برنامه ها و حالت ترمینال از طریق اتصالات چند ssh استفاده کنید. آنها صفحه نمایش (موجود ، اما متاسفانه ناشناخته هستند. ظاهرا اکنون فعالانه توسعه یافته اند ) و tmux (جدیدتر ، فعالانه حفظ شده). Byobu یک جلو است که می تواند در بالای این سیستم ها اجرا شود و اطلاعات وضعیت اضافی اوبونتو را ارائه دهد. در نصب های جدید از tmux به عنوان پس زمینه استفاده خواهد کرد ، اگر نصب قدیمی تر از byobu داشته باشید و پیکربندی موجود آن با پسوند قبلی را حفظ کند ، خواه صفحه باشد یا tmux.

بیوبو

Byobu را می توان با انجام این کار در دستگاه مبتنی بر دبیان نصب کرد:

 sudo aptitude install byobu
 

با استفاده از یام ، شما انجام می دهید

 su -c 'yum install byobu'
 

همچنین امکان نصب byobu در سایر توزیع ها نیز وجود دارد.

با استفاده از byobu

byobu بعد از اتصال با استفاده از ssh می توانید byobu را با اجرای روی میزبان شروع کنید . این پوسته به شما می دهد:


تصویر-byobu

همچنین می توانید از Byobu Terminal در دستگاه اوبونتو با گزینه -X استفاده کنید و به راحتی یک byobu کاملاً کار داشته باشید.

طریقه استفاده:

با تایپ کردن byobu را شروع کنید byobu .

برای ایجاد یک پنجره جدید در جلسه فعلی ، F3-F4 می توانید F2 را فشار دهید تا بین ویندوزهای مختلف جابجا شوید.

بهترین بخش در مورد byobu این است که شما مجبور نیستید پردازش های موجود در ترمینال را برای ترک ترمینال بکشید. شما به سادگی می توانید صفحه / tmux (اسکلت byobu) را به پس زمینه ارسال کرده و دفعه بعد که می آیید:

  • برای کنار گذاشتن byobu و keeep ، در حال اجرا (جدا) F6 را فشار دهید.
  • دفعه بعد که می آیید ، درست کنید byobu و می خواهید درست همانجا که بودید برگردید.


    byobu-جدا-پیوست

همچنین می توانید جلسات مختلف byobu توسط byobu -S session1 و غیره ایجاد کنید. و هنگام بازگشت می توانید به هر یک از آنها متصل شوید.

با استفاده از Byobu می توانید کارهای بیشتری انجام دهید. استفاده کنید! برخی از راهنماهای قطعی در اینجا یا اینجا هستند .


22



پس از شروع کار ، نمی توانید این کار را انجام دهید ، قبل از اینکه کار طولانی داشته باشید باید مواردی را تنظیم کنید.

شما می توانید از nohup استفاده کنید ، اما حکمت مدرن نشان می دهد که از صفحه نمایش یا byobu به عنوان ورودی خود استفاده می کنید تا بتوانید کارها را جدا کرده و در حال اجرا بگذارید.

صفحه نمایش این مزیت را دارد که می توانید از یک دستگاه جدا شوید و از دستگاه دیگری استفاده کنید که در صورت تمایل به بررسی فرآیندهای طولانی مدت که فراتر از پایان روز کاری هستند بررسی کنید.

یک راهنمای شروع مناسب برای نمایش در اینجا وجود دارد.

byobu رابط کاربری ساده ای را در بالای صفحه با منوها و غیره قرار می دهد. این همچنین اجرای فعلی صفحه در اوبونتوی جدید است. F2 برای شروع ترمینال جدید F3 / F4 برای جابجایی به جلو و عقب و F6 برای قطع ارتباط. خروجی را تایپ کنید تا در واقع به طور دائمی پایانه ها پایان یابد.


18



سلام ، در حالی که من توافق کردم که صفحه نمایش موثرترین گزینه است. می توانید از vncserver استفاده کرده و فرآیند را روی آن شروع کنید.

همچنین اگر تنها علاقه شما این است که فرایند در حال اجرا باشد و نیازی به کنترل آن نیست ، و از همه مهمتر که نمی دانستید لازم است جلسه را ببندید و روند کار را قبلاً انجام دهید ، شما شانس نیستید اگر شما از پوسته به عنوان پوسته استفاده کرده اید

ابتدا باید با تایپ کردن Ctrl + Z ، فرایند را به پس زمینه ارسال کنید و به دنبال آن bg٪ 1 (تعداد آن به تعداد کار بستگی دارد ، معمولاً 1 است ، اما می توانید به راحتی با استفاده از کارهای فرمان لیست را بکشید)

در آخر فراخوانی فرمان را رد کنید (به دنبال آن jobid ... همان که با دستور bg است)

این امر باعث می شود تا روابط والدین و کودک بین پوسته شما و روند موجود در پس زمینه از بین برود و از پایان یافتن پوسته شما جلوگیری شود.


8



برای یک اسکریپت پوسته ای که در طی مدت زمان طولانی اجرا کرده ام ، وارد سیستم می شوم و این فرایند را با استفاده از '&' در پس زمینه اجرا می کنم.

مثال:

 /path/to/my/script &
 

من جلسه SSH را خارج کرده ام و قطع کردم. وقتی مدتی بعد وارد سیستم می شوم ، فیلمنامه هنوز همانطور که با جمع آوری داده های مداوم از فیلمنامه اثبات شده است ، اجرا می شود.


8


2014-07-29

شما باید از صفحه گنو خارج شوید و ببینید که آیا به شما کمک می کند یا خیر. بسته به نوع نیاز به برنامه برای اجرای در زمان واقعی ، ممکن است مشکلات بیشتری را نسبت به حل آن ایجاد کند ، اما حداقل به شما این امکان را می دهد تا جلسات خود را از سر بگیرید که گویی هرگز آن را ترک نکرده اید.

نحوه استفاده:

  • screen برای اولین بار از این دستور استفاده کنید ، از طریق پیام های معرفی حرکت کنید ، باید یک ترمینال به شما داده شود.
  • Ca Cc ترمینال دیگری را باز می کند
  • Ca Ck یک ترمینال را می کشد
  • برای چرخش در پایانه ها می توانید از Ca C-Space و Ca C-Backspace استفاده کنید
  • اگر بیشتر از دو ترمینال استفاده می کنید ، Ca Ca مفید است
  • Ca Cd جلسه صفحه فعلی را جدا می کند و از صفحه نمایش خارج می شود. سپس می توانید screen -r برای از سرگیری آن جلسه استفاده کنید. شما می توانید چندین جلسه صفحه نمایش جدا شده به طور همزمان داشته باشید ، در این حالت لیستی از جلسات موجود به شما نمایش داده می شود.

بسیاری از گزینه های دیگر ، به عنوان مثال صفحه های اسپلیت وجود دارد ، و همچنین تمام میانبرها کاملاً قابل تنظیم هستند.


4



ساده ترین پاسخ ...

ctrl + z برنامه اجرا را به حالت تعلیق در می آورد

"bg" آن را در پس زمینه اجرا می کند


3



ساده ترین راه این است که دستور خود را در پس زمینه اجرا کنید & . سپس فقط بنویسید:

 disown -a
 

3



در حالی که همه می گویند استفاده کنید disown (تنها گزینه ای که شما دارید پس از اینکه مراحل را شروع کردید) nohup یا حتی اجرای دستور داخل را انجام دهید screen ، که اگر می خواهید تمام خروجی ها را از دستور دریافت کنید مفید است ... من هوادار هستم screen .. من هنوز اکثر توزیع های اصلی لینوکس را امتحان کرده ام و به سادگی قرار دادن کار در پس زمینه و ترک کار باعث نمی شود همه فرایندهای در حال اجرا بمیرند. باید یک شرایط جهانی یا چیزی وجود داشته باشد. من این کار را در برخی از سیستمهای قدیمی بسیار قدیمی (اسلایک ۱۲) انجام می دهم و فیلمنامه امتحان من تا زمانی که به صورت دستی آن را بکشد اجرا می شود:

 shell$ cat > test.pl

#!/usr/bin/perl
while(1){
     sleep(1);
}
    shell$ perl ./test.pl &
    shell$ exit
    logout
    shell$ ps aux test.pl
    mymom 31337     1  0 13:25 ?        00:00:00 perl ./test.pl
    shell$ 
 

در حالی که من موافقم که screen این بهترین راه برای اجرای این کار خواهد بود ، حتی اگر اسکریپت من برای ثبت پرونده ها یا هر چیز دیگری نوشته باشد. من هرگز نیازی به استفاده از آن ندارم disown -a یا nohup مگر اینکه از پارانویای کامل خارج باشد. ممکن است کسی بتواند برخی از رفتارهای بد را به طور پیش فرض روشن کند؟ شاید برخی از مدیران سیستم پیش فرض های موجود در پوسته های بزرگ را تغییر دهند تا فرآیند کاربران خود را از اضافه بار سیستم نگذارد؟


0



متأسفانه ، جلسه SSH خاتمه یافته منجر به کشته شدن tmux یا صفحه می شود. این امر به این دلیل است که systemd به محض خارج شدن از جلسه ، هر فرآیند کودک را خاتمه می دهد.

می توانید این تنظیمات را در logind.conf ( /etc/systemd/logind.conf ) خود تغییر دهید :

 KillUserProcesses=no
 

با تشکر برای پاسخ در https://unix.stackexchange.com/questions/490267 .


0



بجای :

 cmd options; 
 

قبل از اضافه کردن nohup :

 nohup cmd options & 
 

سپس ، شما قادر خواهید بود استدل کنسول را توسط:

 tail -f nohup.out
 

-1



انتشارات مرتبط


چگونه می توان از شروع خودکار آپاچی و mysql جلوگیری کرد

چگونه می توان "ناخواسته اضافی در انتهای پرونده" را هنگام استفاده از نرم افزار حل کرد؟

نحوه تعمیر پردازش با runit و git-daemon run [کپی]

چگونه پیام خوش آمدید را پس از ورود به سیستم SSH غیرفعال کنیم؟

چگونه Thunderbird و Pidgin را در پس زمینه اجرا کنیم؟

چگونه بعد از کلیک روی پیوند ، zoomlevel را در Evince ثابت نگه داریم؟

چگونه می توان "فایل های نقطه" را تحت کنترل نسخه نگه داشت؟

چگونه فقط اوبونتو را حداقل نگه داریم؟

چگونه می توان برنامه را پس از بستن ترمینال ادامه داد؟

چگونه پس از تعلیق رایانه بر روی SSH ، ترمینال را برگردانیم؟

[ssh] سوال برچسب


چگونه کاربر موجود را به یک گروه موجود اضافه کنیم؟

چه کار باید بکنم وقتی اوبونتو یخ زد؟

چگونه می توانم Java JDK 6/7/8 اختصاصی Sun / Oracle را نصب کنم یا JRE؟

چگونه می توانم صفحه خود را ضبط کنم؟

کلیدهای میانبر صفحه کلید و ماوس Unity چیست؟

چگونه با استفاده از ntp یک بروزرسانی ساعت را مجبور کنیم؟

اجرای sudo بدون پسورد؟

ویرایشگر تصویر ساده؟

چگونه قلم ها را تغییر دهم و اندازه آنها را تنظیم کنم؟