প্রশ্ন আমি লগআউট পরে চলমান একটি লিনাক্স প্রক্রিয়া রাখা


আমি এসএসএইচ এর মাধ্যমে একটি লিনাক্স মেশিনের সাথে সংযোগ করছি, এবং আমি একটি ভারী ব্যাশ স্ক্রিপ্ট চালানোর চেষ্টা করছি যা ফাইল সিস্টেম অপারেশন করে। এটি ঘন্টার জন্য চলতে থাকবে বলে আশা করা হচ্ছে, তবে আমার ইন্টারনেট সংযোগগুলির সমস্যাগুলির কারণে আমি SSH অধিবেশন খুলতে পারি না।

আমি ব্যাকগ্রাউন্ড অপারেটর সঙ্গে স্ক্রিপ্ট চলমান সন্দেহ, ampersand (&), কৌতুক করবে, কারণ আমি এটি চেষ্টা করেছিলাম এবং পরে এটি প্রক্রিয়াটি সম্পন্ন হয় নি। কিভাবে আমি লগ আউট এবং প্রক্রিয়া চলমান রাখতে পারেন?


139
2017-09-15 06:00


উত্স




উত্তর:


সর্বোত্তম পদ্ধতি হল টার্মিনাল মাল্টিপ্লেক্সারে প্রক্রিয়া শুরু করা। বিকল্পভাবে আপনি প্রক্রিয়াটি হুপ সিগন্যাল পাবেন না।


একজন টার্মিনাল মাল্টিপ্লেক্সার "বাস্তব" টার্মিনাল থেকে মুক্ত যা "ভার্চুয়াল" টার্মিনাল সরবরাহ করে (আসলে সব টার্মিনাল আজ "ভার্চুয়াল" তবে এটি অন্য দিনের জন্য অন্য বিষয়)। আপনার আসল টার্মিনালটি আপনার ssh অধিবেশন বন্ধ থাকলেও ভার্চুয়াল টার্মিনাল চলমান থাকবে।

ভার্চুয়াল টার্মিনাল থেকে শুরু করা সমস্ত প্রক্রিয়াগুলি সেই ভার্চুয়াল টার্মিনালের সাথে চলতে থাকবে। যখন আপনি সার্ভারে পুনঃসংযোগ করেন তখন আপনি ভার্চুয়াল টার্মিনালে পুনরায় সংযোগ স্থাপন করতে পারেন এবং যা কিছু ঘটেছে তার মতো সবকিছু ঘটবে না।

দুটি জনপ্রিয় টার্মিনাল মাল্টিপ্লেক্সার হয় পর্দা এবং tmux

স্ক্রিন একটি খাড়া শেখার বক্ররেখা আছে। এখানে ধারণাটি ব্যাখ্যা করে চিত্রের সাথে একটি ভাল টিউটোরিয়াল রয়েছে: http://www.ibm.com/developerworks/aix/library/au-gnu_screen/


দ্য hup টার্মিনালটি বন্ধ হয়ে গেলে সিগন্যাল (বা SIGHUP) টার্মিনাল দ্বারা তার সমস্ত সন্তানের প্রসেসগুলিতে পাঠানো হয়। SIGHUP গ্রহণ উপর সাধারণ কর্ম বিনষ্ট করা হয়। সুতরাং আপনার ssh অধিবেশন সংযোগ বিচ্ছিন্ন যখন আপনার সব প্রসেস বন্ধ হবে। এগুলি এড়ানোর জন্য আপনি আপনার প্রক্রিয়াগুলি SIGHUP গ্রহণ করতে পারবেন না।

তাই করতে দুটি সহজ পদ্ধতি nohup এবং disown

কিভাবে সম্পর্কে আরও তথ্যের জন্য nohup এবং disown কাজ এই প্রশ্নের এবং উত্তর পড়তে: https://unix.stackexchange.com/questions/3886/difference-between-nohup-disown-and

দ্রষ্টব্য: যদিও প্রসেসগুলি চলতে থাকবে তবে আপনি আর তাদের সাথে যোগাযোগ করতে পারবেন না কারণ তারা কোনও টার্মিনালে সংযুক্ত নেই। এই পদ্ধতিটি প্রধানত দীর্ঘ চলমান ব্যাচ প্রসেসগুলির জন্য দরকারী, যা একবার শুরু হয়, আর কোন ব্যবহারকারীর ইনপুট প্রয়োজন হয় না।


133
2017-09-15 06:05



আমি এই উত্তরটি পছন্দ করি কারণ এটি ইন্টারেক্টিভ এবং নন-ইন্টারেক্টিভ উভয় পরিস্থিতিতে সমাধান প্রদান করে। ইন্টারেক্টিভ ক্ষেত্রে, screen আপনি আরো অনেক অপশন দেয়, কিন্তু আপনি ব্যবহার করছেন authorized_keys মানুষ মাধ্যমে দূরবর্তী একটি স্ক্রিপ্ট চালানোর অনুমতি দেয় ssh, দ্য nohup বিকল্পটি স্ক্রিপ্টগুলির জন্য দীর্ঘতর দীর্ঘস্থায়ী প্রক্রিয়াগুলি শুরু করার জন্য একটি চমৎকার সহজ উপায় ssh অধিবেশন তাদের শুরু করতে ব্যবহৃত। - Mark Booth
@rahmanisback - মনে রাখবেন যে আপনি যে কোনো সময় আপনার গ্রহণযোগ্য উত্তর পরিবর্তন করতে পারেন। যেহেতু এরিকএর উত্তরটি সর্বাধিক বেশি ভোট দেওয়া হয়েছে তাই তার অর্থ এই নয় যে এটি আপনার জন্য সর্বোত্তম উত্তর, প্রকৃতপক্ষে এটি আপনার গ্রহণযোগ্য উত্তরটি ভাল উত্তর হিসাবে আরও ভোট দিতে উত্সাহিত করতে পারে। - Mark Booth
* কাশি * tmuxisbetter * কাশি * - crasic
tmux > পর্দা। এটা চেষ্টা করুন, আপনি ফিরে যেতে হবে না। - h0tw1r3
@ থিলকু - বাইবু হয় জিএনইউ স্ক্রিন আপনি এখনও একটি অত্যন্ত কাস্টমাইজড। স্ক্রিনস্ক সঙ্গে, পর্দা ব্যবহার করছেন। - EEAA


এটি করার কয়েকটি উপায় রয়েছে, তবে যেটি আমি সবচেয়ে দরকারী তা ব্যবহার করা হয় জিএনইউ স্ক্রিন

এসএসএস পরে, রান screen। এটি পর্দা মধ্যে চলমান আরেকটি শেল শুরু হবে। আপনার কমান্ড চালান, তারপর একটি জন্য ctrl-একটি 

এটি আপনাকে স্ক্রীন সেশন থেকে "বিচ্ছিন্ন" করবে। এই মুহুর্তে, আপনি লগ আউট করতে বা অন্য কিছু করতে পারেন যা আপনি চান।

যখন আপনি স্ক্রীন সেশনে পুনরায় সংযোগ করতে চান, তখনই চালান screen -RD শেল প্রম্পট থেকে (একই ব্যবহার ব্যবহারকারী হিসাবে যে সেশন তৈরি করেছেন)।


92
2017-09-15 06:07



অসাধারণ! শুকনো উত্তর, ধন্যবাদ ... - rahmanisback
স্ক্রিনটি কমান্ডের সম্পূর্ণ গোষ্ঠী রয়েছে, এটি Ctrl-A দিয়ে শুরু হয়। যদি আপনি শুধুমাত্র একটি অতিরিক্ত শিখতে থাকেন তবে "Ctrl-a?" দিয়ে শুরু করুন। তারপর আপনি "Ctrl-a c" এবং "Ctrl-a n" শিখতে চান না - olafure
@ লোফফুর +1, ধন্যবাদ। মনে হচ্ছে স্ক্রিন আমার প্রাথমিক টুলবক্স হতে যাচ্ছে। - rahmanisback
tmux > পর্দা। এটা চেষ্টা করুন, আপনি ফিরে যেতে হবে না। - h0tw1r3
Tmux জন্য +1। আমি 5 সপ্তাহ আগে পর্দা ছেড়ে দিয়েছিলাম। - Bryan Hunt


মধ্যে bash, দ্য disown শব্দটি পুরোপুরি উপযুক্ত। প্রথম, ব্যাকগ্রাউন্ডে আপনার প্রক্রিয়া চালান (হয় ব্যবহার করুন &, অথবা ^Z তারপর টাইপ করুন bg):

$ wget --quiet http://server/some_big_file.zip &
[1] 1156

টাইপ করে jobs আপনি যে প্রক্রিয়া শেল দ্বারা এখনও মালিকানা দেখতে পারেন:

$ jobs
[1]+  Running  wget

আপনি যদি এই সময়ে লগ আউট করতে চান, তাহলে ব্যাকগ্রাউন্ড টাস্কও মারা যাবে। যাইহোক, যদি আপনি চালানো disown, bash কাজটি বিচ্ছিন্ন করে এবং চলমান চলতে সক্ষম করে:

$ disown

আপনি এই নিশ্চিত করতে পারেন:

$ jobs
$ logout

আপনি এমনকি একত্রিত করতে পারেন & এবং disown একই লাইনে, যেমন:

$ wget --quiet http://server/some_big_file.zip & disown
$ logout

এই চলমান চেয়ে ভাল nohup আমার মতামত এটা ছেড়ে না কারণ nohup.out ফাইল আপনার ফাইল সিস্টেমের উপর সব littered। এছাড়াও, nohup কমান্ড চালানোর আগে চালানো আবশ্যক - disown যদি আপনি শুধুমাত্র পরে ব্যাকগ্রাউন্ড চান এবং টাস্ক আলাদা করতে সিদ্ধান্ত নেয় তাহলে ব্যবহার করা যেতে পারে।


70
2017-09-15 12:27



এটি একটি খুব ভাল উত্তর, 1+। নহুপ বা স্ক্রিনের জন্য একমাত্র পছন্দ বশের স্বাধীনতা হবে এবং অন্যান্য শেলের সাথে এটি ব্যবহার করা যেতে পারে। কিন্তু যখন আমি ব্যাশ ব্যবহার করছি তখন আমি আপনার পদ্ধতিতে থাকব। - rahmanisback
হ্যাঁ - এটি ব্যাশ-নির্দিষ্ট, যেমন ব্যাশটি আমি কখনও ব্যবহার করেছি শুধুমাত্র শেল। অন্য শেলগুলি একই রকম কিছু সমর্থন করে (যেমন কোনও নুপুপ ছাড়াই পটভূমিতে প্রবর্তন করা হয়) আমি ভাবছি - কেউ যদি অন্য শেলগুলির জন্য অন্য উত্তর পোস্ট করতে পারে তবে চমত্কার হবে। - Jeremy Visser
আমার উত্তরটি দেখুন যে কোনও sh-lookalike এর সাথে এটি কীভাবে করা যায় - w00t
+1 কারণ পরে সিদ্ধান্ত নিতে সক্ষম হচ্ছে। শুধু এই মুহূর্তে আমি এই জন্য একটি প্রয়োজন ছিল। বিজ্ঞাপন হিসাবে কাজ - code_monk


টুল নোহুপ, বেশিরভাগ লিনাক্স বাক্সে পাওয়া যায়।


37
2017-09-15 06:14



এই পর্যন্ত সবচেয়ে সহজ উত্তর। কোন আউটপুট স্বয়ংক্রিয়ভাবে nohup.out নির্দেশিত হয় এবং পরে পরীক্ষা করা যেতে পারে। - Julian
nohup সব সময়ে zsh প্রয়োজন হয় না। - Aaron Brown
nohup সঠিক উত্তর, এটি কোন hangup জন্য সংক্ষিপ্ত। - Kinjal Dixit
nohup পর্দা পর্যন্ত অনেক বেশি মেশিনে পাওয়া যায়, তাই আপনাকে এটি কীভাবে ব্যবহার করতে হবে তা জানা উচিত। - Zenon


শুধু পুঙ্খানুপুঙ্খ হতে, আমি নির্দেশ করব tmux, পর্দা হিসাবে একই মূল ধারণা আছে যা:

জিএমইউ স্ক্রিনের মতো প্রোগ্রামগুলিতে টিএমক্সির আধুনিক, বিএসডি-লাইসেন্সপ্রাপ্ত বিকল্প হতে চলেছে। প্রধান বৈশিষ্ট্য অন্তর্ভুক্ত:

  • একটি শক্তিশালী, সামঞ্জস্যপূর্ণ, ভাল নথিভুক্ত এবং সহজে স্ক্রিপ্টযোগ্য কমান্ড ইন্টারফেস।
  • একটি উইন্ডো প্যান মধ্যে অনুভূমিক এবং উল্লম্বভাবে বিভক্ত করা যেতে পারে।
  • Panes অবাধে সরানো এবং আকার পরিবর্তন করা যাবে, বা প্রিসেট লেআউট মধ্যে ব্যবস্থা।
  • UTF-8 এবং 256-রঙ টার্মিনালগুলির জন্য সমর্থন।
  • কপি এবং একাধিক বাফার সঙ্গে পেস্ট।
  • উইন্ডোজ, সেশন বা ক্লায়েন্ট নির্বাচন করার জন্য ইন্টারেক্টিভ মেনু।
  • টার্গেট পাঠ্যের জন্য অনুসন্ধান করে বর্তমান উইন্ডো পরিবর্তন করুন।
  • টার্মিনাল লকিং, নিজে বা একটি টাইমআউট পরে।
  • একটি পরিষ্কার, সহজে বর্ধিত, বিএসডি-লাইসেন্সযুক্ত কোডबेस, সক্রিয় বিকাশের অধীনে।

তবে এটি গুগলের জন্য অনুসন্ধান করা প্রায় অসীম সহজ।


27
2017-09-15 06:23



ব্যবহার "gnu screen" আপনার অনুসন্ধান অনুসন্ধান বেশ ভাল কাজ করে। - gnur
Tmux জন্য +1000! - mbq


স্ক্রিনটি লগ আউট করার সময় চলমান প্রক্রিয়াগুলিকে কেবলমাত্র ধরে রাখে।

চেষ্টা dtach:

dtach একটি প্রোগ্রাম লিখিত যে সি বিচ্ছিন্ন বৈশিষ্ট্য emulates   পর্দা, যা একটি প্রোগ্রাম যে একটি পরিবেশে মৃত্যুদন্ড কার্যকর করতে পারবেন   নিয়ন্ত্রণ টার্মিনাল থেকে রক্ষা করা হয়। উদাহরণস্বরূপ, প্রোগ্রাম   DTach নিয়ন্ত্রণ অধীনে টার্মিনাল দ্বারা প্রভাবিত হবে না   কিছু কারণে বিচ্ছিন্ন।

Dtach লেখা ছিল কারণ পর্দা পর্যাপ্তরূপে আমার প্রয়োজন পূরণ হয়নি; আমি   একাধিক জন্য সমর্থন যেমন পর্দার অতিরিক্ত বৈশিষ্ট্য প্রয়োজন ছিল না   টার্মিনাল বা টার্মিনাল এমুলেশন সমর্থন। পর্দা খুব বড় ছিল,   ভারী, এবং বোঝার কঠিন ছিল যে উৎস কোড ছিল।

পর্দা এছাড়াও পূর্ণ পর্দা অ্যাপ্লিকেশন যেমন আমার ব্যবহার সঙ্গে হস্তক্ষেপ   emacs এবং ircII, প্রবাহ তার অত্যধিক ব্যাখ্যা কারণে   প্রোগ্রাম এবং সংযুক্ত টার্মিনাল মধ্যে। dtach একটি আছে না   টার্মিনাল এমুলেশন স্তর, এবং কাঁচা আউটপুট প্রবাহ পাস   সংযুক্ত টার্মিনাল প্রোগ্রাম। শুধুমাত্র ইনপুট প্রক্রিয়াকরণ যে   dtach সঞ্চালন বিচ্ছিন্ন চরিত্র জন্য স্ক্যান করা হয় (যা সংকেত   প্রোগ্রাম থেকে বিচ্ছিন্ন dtach) এবং সাসপেন্ড কী প্রক্রিয়াকরণ   (যা datach অস্থায়ীভাবে প্রভাবিত ছাড়া নিজেকে সাসপেন্ড বলে   চলমান প্রোগ্রাম), এবং উভয় ইচ্ছা করলে যদি উভয় নিষ্ক্রিয় করা যেতে পারে।

পর্দার বিপরীত, dtach সংক্ষিপ্ত বৈশিষ্ট্য আছে, এবং অত্যন্ত ক্ষুদ্র।   এই dtach বাগ এবং নিরাপত্তা জন্য আরো সহজে অডিট করা সম্ভব   গর্ত, এবং স্থান সীমিত যেখানে পরিবেশে এটি অ্যাক্সেসযোগ্য করে তোলে,   যেমন রেসকিউ ডিস্ক উপর।


11
2017-09-15 15:06



ধন্যবাদ. আমি শুধু এখানে dtach পোস্ট করার জন্য এখানে এসেছিলেন। এটা এখন আমার টার্মিনাল বিচ্ছিন্নতা জন্য জিনিস যাচ্ছে; পর্দা খুব বেশী পথ, এবং একটি হাস্যকর ডিগ্রী ইনপুট হস্তক্ষেপ। সত্য পর্দা তার নিজস্ব termcap প্রয়োজন বেশ বিরক্তিকর। - fluffy


এখানে কোন শেল প্রক্রিয়া ডিমনোমাইজ করার একটি উপায়, কোন বহিরাগত প্রোগ্রাম প্রয়োজন:

( while sleep 5; do date; done ) <&- >output.txt &

যখন আপনি আপনার সেশনটি বন্ধ করবেন তখন আউটপুট.txt ফাইলের প্রমাণ হিসাবে কাজ চালানো চলবে (যা বাফারিং করেছে তাই এটি অ-শূন্য দেখানোর জন্য কিছু সময় নেয়)। পরীক্ষার পর আপনার কাজ হত্যা করতে ভুলবেন না।

তাই আপনাকে যা করতে হবে তা বন্ধ স্টেডিন এবং ব্যাকগ্রাউন্ডের কাজ। সত্যিই ভাল হতে, প্রথম cd / তাই আপনি একটি মাউন্ট রাখা না।

এই Solaris অধীনে সহজ sh এমনকি কাজ করে।


9
2017-09-16 16:48



মজাদার. যে কিছু উল্লেখযোগ্য প্রশ্ন উদ্ভূত। আমি দেখতে পাচ্ছি যে তুমি এসটিডিআইএনকে কিছুতেই সেট করো না - অপারেটর? পার্থক্য কি < /dev/null এবং &- ? আমি অনুমান করি যে STDIN (এবং অন্যান্য STDOUT এবং STDERR) একটি ফাইল দ্বারা বরাদ্দ করা যেতে পারে < file, অথবা একটি প্রবাহ দ্বারা <& stream STDIN ক্ষেত্রে। এটা ব্যবহার করে একই হতে হবে < /dev/null উপরে আপনার উদাহরণ? এবং অপারেটর না - উপরে স্ট্রিম হিসাবে একটি নিল পড়ুন? - rahmanisback
যখন আপনি x <এবং - করবেন, তখন এটি ফাইল ডিস্ক্রিপ্টর x বন্ধ করে। এই ক্ষেত্রে কোন x নেই, যা ব্যাশটিকে ডিফল্ট 1 করে দেয়, যেমন স্ট্যান্ডার্ড ইনপুট। আপনি যদি </ dev / null ব্যবহার করেন তবে আপনি stdin বন্ধ করছেন না, আপনি কেবলমাত্র ইনপুট হিসাবে প্রোগ্রামে একটি খালি ফাইল দিচ্ছেন। - w00t
এবং সৎ হতে আমি আসলেই জানি না কেন এটি আপনার চলমান জিনিসটিকে ডেমোক্রাইজ করে :-) যদিও এটি কাজ করে তবে আমরা এটি উত্পাদনতে ব্যবহার করি। আশা করি আশেপাশে ঘুরে বেড়ানোর সময় আমি কোনও বিশেষ প্রয়োজন ছাড়াই শেলের একটি প্রক্রিয়া ডিমনোমাইজ করতে পারতাম - তাই আমি stdin বন্ধ করে শুরু করেছিলাম এবং এটি যথেষ্ট ছিল। আমার কিছু শেল উত্স পড়তে হবে তবে আমি মনে করি যদি আপনি stdin এবং ব্যাকগ্রাউন্ড প্রক্রিয়াটি বন্ধ করেন তবে এটি প্রক্রিয়াটিকে পৃথক করে। - w00t
আমার মনে হয় কারণ SIGHUP (প্রকৃত সংকেত যা শিশুটিকে শেলের সময় প্রস্থান করার কারণ দেয়) যখন একটি পিতামাতার প্রক্রিয়া তার সন্তানের স্টেডিন হ্যান্ডেল বন্ধ করে দেয় তখন এটি ট্রিগার হয়। তবে, স্টেডিন যদি শুরু হয় সত্যের পরে বন্ধ থাকার পরিবর্তে নল হিসাবে, পিতামাতার SIGHUP ট্রিগার করার কোন উপায় নেই। চমৎকার খুঁজে, যদিও - যে চিন্তা হবে না। - Jeremy Visser
@ জেরেমিভিসার সত্যিই শোভনীয় বলে মনে হচ্ছে! - w00t


দ্য at কমান্ড এই ধরনের পরিস্থিতির জন্য দরকারী হতে পারে। উদাহরণস্বরূপ, টাইপ করুন:

at now

এবং তারপর আপনি একটি কমান্ড বা কমান্ডের সিরিজ প্রবেশ করতে পারেন যা চালানো হবে। যদি মেশিনে ই-মেইলের সঠিকভাবে সেট আপ করা হয় তবে ফলাফলগুলি আপনাকে ই-মেইল করা উচিত।

পরিবর্তে now, আপনি একটি তারিখ, অথবা একটি সময় মত প্রকাশের সঙ্গে বিকল্পভাবে একটি সময় নির্দিষ্ট করতে পারেন now + 15 minutes। দেখ man at বিস্তারিত জানার জন্য.


7
2017-09-16 08:23