ধরা যাক আমি ssh অধিবেশন থেকে একগুচ্ছ প্রক্রিয়া চালু করি। দূরবর্তী মেশিনে এই প্রক্রিয়াগুলি চালিয়ে যাওয়ার সময় কি ssh সেশনটি সমাপ্ত করা সম্ভব?
ধরা যাক আমি ssh অধিবেশন থেকে একগুচ্ছ প্রক্রিয়া চালু করি। দূরবর্তী মেশিনে এই প্রক্রিয়াগুলি চালিয়ে যাওয়ার সময় কি ssh সেশনটি সমাপ্ত করা সম্ভব?
উত্তর:
আপনার মতো আধুনিক বিকল্পগুলির সন্ধান করা উচিত tmux
।
tmux
screen
অনেক কারণে উচ্চতর , এখানে কিছু উদাহরণ রয়েছে:
প্রস্তাবিত উত্তরে বর্ণিত হিসাবে একই কার্যকারিতাটি পেতে screen
, আপনাকে নিম্নলিখিতগুলি করতে হবে:
tmux
টাইপ tmux
করে শুরু করুনtmux
অধিবেশনটির মধ্যে আপনি যে প্রক্রিয়াটি চান তা শুরু করুনtmux
টাইপ করে অধিবেশন Ctrl+ + bএবং তারপরd আপনি এখন রিমোট মেশিন থেকে নিরাপদে লগ অফ করতে পারেন, আপনার প্রক্রিয়াটি ভিতরে চলতে থাকবে tmux
। যখন আপনি আবার ফিরে আসেন এবং আপনার প্রক্রিয়াটির স্থিতি পরীক্ষা করতে চান tmux attach
আপনি নিজের tmux
সেশনে সংযুক্ত করতে ব্যবহার করতে পারেন ।
আপনি যদি পাশাপাশি একাধিক সেশন চলতে চান তবে আপনার প্রতিটি সেশনটির নাম Ctrl+ bএবং ব্যবহার করে করা উচিত $
। আপনি বর্তমানে চলমান সেশনগুলির একটি তালিকা ব্যবহার করে পেতে পারেন tmux list-sessions
, এখন কমান্ড সহ একটি চলমান সেশনে সংযুক্ত করুন tmux attach-session -t 0
।
tmux
একক সেশনে একটি একক উইন্ডো হ্যান্ডেল করার চেয়ে আরও অনেক উন্নত কাজ করতে পারে। আরও তথ্যের জন্য tmux গিটহাব পৃষ্ঠাটি দেখুন man tmux
বা দেখুন । বিশেষ করে, এখানে একটি প্রশ্ন এর মধ্যে মূল পার্থক্য সম্পর্কে এবং ।screen
tmux
screen -x -r [screenname]
বা screen -rx
সংক্ষেপে যদি আপনার কেবলমাত্র একটি স্ক্রিন সেশন সক্রিয় থাকে। এটি আপনাকে একটি বিদ্যমান পর্দার উদাহরণ সংযুক্ত করতে দেয়।
Ctrl-b
এবং তারপরে সেশনটি d
ছেড়ে / আলাদা করতে tmux
হবে। অবশ্যই tmux
আমার উবুন্টু 12.04 এর সংস্করণটির ক্ষেত্রে এটি ।
tmux detach
টাইপিংয়ের পরিবর্তে চালানctrl-b d
nohup
সবচেয়ে ভাল উপায় প্রায়শই সহজতম।
nohup long-running-command &
এটি বিশেষত এটির জন্য তৈরি করা হয়েছিল, এটি এমনকি stdout লগ করে nohup.log
।
man nohup
bg
আপনি যদি ইতিমধ্যে কয়েকটি চলমান কার্য "পটভূমি" করতে চান তবে আপনার সেরা বাজিটি Ctrl+ Zতারপর চালানো
bg
আপনার সাম্প্রতিক স্থগিত করা কাজটিকে পটভূমিতে রাখতে, এটি চালিয়ে যাওয়ার অনুমতি দেয়।
তারপরে আপনার দ্রুত disown
লগ আউট করার পরে একটি প্রক্রিয়া চালিয়ে যাওয়া উচিত।
screen
এবং অন্যরা এটি করতে পারে তবে এটি তাদের পক্ষে নয়। nohup
আপনি যে bg
কাজগুলি আপনার পিছনে ছেড়ে যেতে চলেছেন এবং যে কাজগুলি ইতিমধ্যে আপনার চলছে এবং আপনি আবার শুরু করতে চান না তার জন্য আমি প্রস্তাব দিই ।
মনে রাখবেন, উভয়ই বাশ নির্দিষ্ট। আপনি যদি ব্যাশ ব্যবহার না করে থাকেন তবে কমান্ডগুলি আলাদা হতে পারে।
disown -h
bg
+ + disown
আমার জন্য কাজ করে নি। আমার একটি ডিপ্লোয়মেন্ট স্ক্রিপ্ট চলছিল আমি টিএমউক্সের ভিতরে শুরু করতে ভুলে গিয়েছিলাম, এবং সভার জন্য তাড়াতাড়ি চলে যেতে হবে। স্ক্রিপ্ট অবিচ্ছিন্নভাবে শেলের উন্নতি করে। ctrl+z
প্রক্রিয়াটি বন্ধ করে দিয়েছিল, আমাকে বাশায় ফিরিয়েছে। bg
প্রক্রিয়াটি আবার শুরু হয়েছিল, তবে এটি আবার কীভাবে টাইপ করছিল তা দেখতে অসম্ভব করে তোলে এবং ব্যাশের স্থিতিটিকে আবার আউটপুট করা শুরু করে। তবে, একটি disown
কমান্ড তৈরি করেছে "অস্বীকার: কারেন্ট: এ জাতীয় কোনও কাজ নয়"
julia myFile.jl
যে কোনও কারণে আমার পক্ষে কার্যকর হয়নি । tmux না এবং দুর্দান্ত।
আপনি এটি ব্যবহার করে তা করতে পারতেন screen
।
man screen
আরও জানতে বা এই স্ক্রিন ম্যান পৃষ্ঠাটি পড়তে টাইপ করুন ।
সাধারণ দৃশ্য:
আপনার দূরবর্তী বাক্সে ssh। টাইপ করুন screen
তারপর আপনি চান প্রক্রিয়া শুরু করুন।
Ctrl- Aতারপর Ctrl- টিপুন D। এটি আপনার স্ক্রিন সেশনটিকে "বিচ্ছিন্ন" করবে কিন্তু আপনার প্রক্রিয়াগুলি চলমান রেখে দেবে। আপনি এখন দূরবর্তী বাক্স থেকে লগ আউট করতে পারেন।
আপনি যদি পরে ফিরে আসতে চান তবে আবার লগইন করুন এবং এটি টাইপ করুন screen -r
এটি আপনার স্ক্রিন সেশনটি "পুনঃসূচনা" করবে এবং আপনি আপনার প্রক্রিয়াটির আউটপুট দেখতে পাবেন।
screen -S name
সাথে সঠিকটির সাথে সংযোগ আরও সহজ করার জন্য ব্যবহার করব ।
screen -S
ছুটির আগে এবং screen -r
ফিরে আসার সাথে সংমিশ্রণটি আশ্চর্যজনক!
স্ক্রিন এবং নোহপ হ'ল আরও ভাল উপায়, তবে আপনাকে যদি ইতিমধ্যে পর্দা বা নোহুপ ছাড়া চলমান কোনও প্রক্রিয়াটি আলাদা করতে হয় তবে আপনি অস্বীকার কমান্ড চালাতে পারেন।
disown [-ar] [-h] [
jobspec
… |
pid
… ]
বিকল্পগুলি ছাড়াই, প্রতিটি কাজের স্পেক সক্রিয় কাজের সারণী থেকে সরান । যদি
-h
বিকল্পটি দেওয়া হয়, কাজটি টেবিল থেকে সরানো হয় না, তবে চিহ্নিত করা হয় যাতে শেলটি যদি একটি SIGHUP পায় তবে SIGHUP কাজটিতে প্রেরণ করা হবে না। যদি জবস্পেক উপস্থিত-a
না থাকে এবং-r
বিকল্পটি সরবরাহ না করা হয় তবে বর্তমান কাজটি ব্যবহৃত হয়। যদি কোনও জবস্পেক সরবরাহ না করা হয় তবে-a
বিকল্পটির অর্থ সমস্ত কাজ সরিয়ে বা চিহ্নিত করা;-r
একটি ছাড়া বিকল্প jobspec যুক্তি কাজ চলমান অপারেশন নিষিদ্ধ।
অস্বীকার করার সাথে সাথে আপনি টার্মিনালটি বন্ধ করতে পারেন এবং মেশিনে প্রক্রিয়াটি চালু রাখতে পারেন।
disown -a && exit
disown
এবং এটি এটি হত্যা করে।
আমি একটি বড় এমভিতে আটকে গিয়েছিলাম তাই আমি প্রক্রিয়াটি সেটআপ করার মতো পজিশনে ছিলাম না, স্ক্রিন সেটআপ করে আবার এটি শুরু করব start নিম্নলিখিত পদক্ষেপগুলি মূলত করে প্রসেসটি চালিয়ে আমি ssh সেশনটি প্রস্থান করতে সক্ষম হয়েছি:
পদক্ষেপ 3 বর্তমান প্রক্রিয়াটি বিরতি দেয় (যেমন আমার 'এমভি' কমান্ড))
পদক্ষেপ 4 বিরামপ্রাপ্ত প্রক্রিয়াটিকে ব্যাকগ্রাউন্ডে রাখে এবং এটি পুনরায় শুরু করে।
পদক্ষেপ 5 আপনাকে প্রক্রিয়াটি অস্বীকার করতে দেয়। ** কাজের তালিকা পাওয়ার জন্য কেবল jobs
আগে টাইপ করুন type
** অস্বীকার সম্পর্কিত (বাশ ম্যানুয়াল থেকে):
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.
disown
বিল্ট-ইন কমান্ডটি সাম্প্রতিক ব্যাকগ্রাউন্ড জবটিতে কাজ করে।
দুটি বড় প্রোগ্রাম রয়েছে যা আপনি একাধিক ssh সংযোগের উপর প্রোগ্রাম এবং টার্মিনাল অবস্থা বজায় রাখতে ব্যবহার করতে পারেন। এগুলি পর্দা (আগত, তবে দুর্ভাগ্যক্রমে অবিশ্বাস্য। স্পষ্টতই এখন সক্রিয়ভাবে বিকশিত হচ্ছে ) এবং টিএমউক্স (আরও নতুন, সক্রিয়ভাবে রক্ষণাবেক্ষণ করা)। ব্যোবু হ'ল একটি সম্মুখ প্রান্ত যা তাদের এই সিস্টেমে শীর্ষে চলে যেতে পারে এবং অতিরিক্ত উবুন্টু স্থিতির তথ্য সরবরাহ করতে পারে। নতুন ইনস্টলেশনগুলিতে এটি ব্যাকএন্ড হিসাবে tmux ব্যবহার করবে, আপনার যদি বাইবু এবং একটি বিদ্যমান কনফিগারেশন রয়েছে তবে এটি পূর্ববর্তী ব্যাকএন্ডটি বজায় রাখবে, এটি পর্দা বা tmux হোক।
ডেবিয়ান-ভিত্তিক মেশিনে ব্যোবু কম্পিউটারে ইনস্টল করা যেতে পারে:
sudo aptitude install byobu
ইউম ব্যবহার করে, আপনি করেন না
su -c 'yum install byobu'
অন্যান্য বিতরণে বাইবু ইনস্টল করাও সম্ভব।
Ssh byobu
ব্যবহার করে সংযোগের পরে হোস্ট মেশিনে চালিয়ে আপনি বাইবু শুরু করতে পারেন । এটি আপনাকে এমন শেল দেবে যা দেখতে এরকম দেখাচ্ছে:
আপনি এক্স-এর বিকল্প সহ উবুন্টু মেশিনে বাইওবু টার্মিনালটিও ব্যবহার করতে পারেন এবং সহজেই পুরোপুরি কার্যকরী বাইবু পেতে পারেন।
বাইপু টাইপ করে শুরু করুন byobu
।
বর্তমান সেশনের মধ্যে একটি নতুন উইন্ডো তৈরি করতে আপনি F2 টিপতে পারেন, বিভিন্ন উইন্ডোর মধ্যে স্যুইচ করতে F3-F4 চাপতে পারেন।
বাইওবু সম্পর্কে সবচেয়ে ভাল দিকটি হল, টার্মিনালটি ছেড়ে যাওয়ার জন্য আপনাকে আসলে টার্মিনালে চলমান প্রক্রিয়াগুলি মেরে ফেলতে হবে না। আপনি কেবল পটভূমিতে স্ক্রিন / টিএমউক্স (বাইোবুর কঙ্কাল) প্রেরণ করতে এবং পরের বার আসার পরে পুনরায় শুরু করতে পারেন:
পরের বার আপনি আসবেন, ঠিক করুন byobu
এবং আপনি যেখানে ছিলেন ঠিক সেখানে ফিরে আসবেন।
এছাড়াও আপনি বিভিন্ন বাইবু সেশন তৈরি করতে byobu -S session1
পারেন ইত্যাদি। এবং আপনি ফিরে এলে আপনি যে কোনও একটিতে সংযোগ করতে পারেন।
আপনি ব্যোবু ব্যবহার করে আরও অনেক কিছু করতে পারেন। এটা ব্যবহার করো! কিছু নির্দিষ্ট নির্দেশিকা এখানে বা এখানে রয়েছে ।
প্রক্রিয়াটি শুরু হয়ে গেলে আপনি এটি করতে পারবেন না, দীর্ঘ কাজ চালানোর আগে আপনার জিনিসগুলি সেট আপ করা দরকার need
আপনি ব্যবহার করতে পারেন nohup কিন্তু আধুনিক জ্ঞান আপনি আপনার লগইন হিসাবে পর্দা বা Byobu ব্যবহার যাতে আপনি বিচ্ছিন্ন কিছু চলমান চলে যাবে দাড়ায়।
স্ক্রিনের সুবিধা রয়েছে যে আপনি একটি মেশিন থেকে আলাদা করতে পারেন এবং অন্যটি থেকে পুনরায় যোগাযোগ করতে পারেন যা আপনি কার্যদিবসের শেষের বাইরে চলে এমন দীর্ঘ চলমান প্রক্রিয়াগুলি পরীক্ষা করতে চান যদি তা কার্যকর।
এখানে স্ক্রিনের জন্য যুক্তিসঙ্গত শুরু করার গাইড রয়েছে ।
বাইবুু মেনু ইত্যাদির সাথে স্ক্রিনের শীর্ষে সহজেই ইন্টারফেস ব্যবহার করতে পারে এটি নতুন উবুন্টুতে পর্দার বর্তমান প্রয়োগও রয়েছে। F2 একটি নতুন টার্মিনাল শুরু করতে F3 / F4 পিছনে এবং সামনে টগল করতে এবং F6 সংযোগ বিচ্ছিন্ন করতে। স্থায়ীভাবে টার্মিনাল শেষ করতে প্রস্থান প্রকার টাইপ করুন।
disown
অর্জন করতে ব্যবহার করতে পারেন । @ বাসগির উত্তর দেখুন
disown
এবং যদি প্রয়োজন হয় Ctrl-z
তবে bg
এটি সক্রিয় টার্মিনাল এবং পটভূমিতে পেতে। তারপরে disown
,।
আরে, আমি যখন একমত হয়েছি যে স্ক্রিনটি সবচেয়ে কার্যকর বিকল্প। আপনি vncserver ব্যবহার করতে পারেন এবং তারপরে প্রক্রিয়াটি শুরু করতে পারেন।
এছাড়াও যদি আপনার একমাত্র আন্তরিক প্রক্রিয়াটি চলমান থাকে এবং এটির নিয়ন্ত্রণ ফিরে নেওয়ার প্রয়োজন না হয় এবং সবচেয়ে গুরুত্বপূর্ণ আপনি সচেতন ছিলেন না তবে আপনার অধিবেশনটি বন্ধ করতে হবে এবং আপনার প্রক্রিয়াটি ইতিমধ্যে চলছে, আপনার ভাগ্য যদি না হয় তবে আপনি খোল হিসাবে ব্যাশ ব্যবহার করেছেন
প্রথমে আপনাকে Ctrl + Z লিখে বিজি% 1 লিখে প্রক্রিয়াটি পটভূমিতে প্রেরণ করতে হবে (সংখ্যাটি কাজের সংখ্যার উপর নির্ভর করে, সাধারণত এটি 1 হয় তবে আপনি কমান্ড জব ব্যবহার করে তালিকাটি সহজেই টানতে পারেন)
অবশেষে কমান্ডটি অস্বীকার করুন (বিজি কমান্ডের মতো চাকরিদারি ...
এটি আপনার শেল এবং পটভূমিতে প্রক্রিয়াটির মধ্যে পিতা-সন্তানের সম্পর্ক সরিয়ে দেবে, আপনার শেলটি বন্ধ হয়ে গেলে এটি মারা যেতে বাধা দেবে।
screen
, প্রশ্নটি লগইন পরবর্তী ইভেন্টে উত্থাপিত হয়েছিল, প্রক্রিয়াগুলি কীভাবে চলতে হবে, এখন লগ ইন করার পরে তবে সেগুলি শুরু করার আগে। দুর্দান্ত উত্তর জর্জি, আপনি সত্যিই আমাকে সাহায্য করেছেন! :)
bg
(ব্যতীত %1
) প্রায়শই যথেষ্ট, যেহেতু ডিফল্টটি বর্তমান কাজ
আমি দীর্ঘ সময় ধরে চলমান একটি একক শেল স্ক্রিপ্টের জন্য, আমি লগইন করব এবং '&' ব্যবহার করে পটভূমিতে প্রক্রিয়াটি চালাব।
উদাহরণ:
/path/to/my/script &
আমি আমার এসএসএইচ সেশনটি লগ আউট এবং সংযোগ বিচ্ছিন্ন করেছি। আমি যখন কিছুক্ষণ পরে লগ ইন করি, স্ক্রিপ্টটি এখনও স্ক্রিপ্ট থেকে অবিচ্ছিন্ন ডেটা সংগ্রহের মাধ্যমে প্রমাণিত হিসাবে কার্যকর করা হয়।
&
যদি আপনি লগ আউট করে এবং আপনার এসএসএইচ অধিবেশনটিতে এই জাতীয় প্রক্রিয়া চালিত করেন তবে প্রক্রিয়াটি এখনও চলমান থাকবে তবে আপনি সেই প্রক্রিয়াটির আউটপুট দেখতে সক্ষম হবেন না (যদি আপনার স্ক্রিপ্টটি যদি কিছু প্রতিধ্বনিত হয় তবে) এটি দেখতে পাবে না, তবে এটি কোনও ফাইল
আপনার জিএনইউ স্ক্রিনটি পরীক্ষা করে দেখতে হবে এবং এটি আপনাকে সহায়তা করে কিনা। রিয়েলটাইমে চালানোর জন্য আপনার কীভাবে আপনার অ্যাপ্লিকেশন প্রয়োজন তার উপর নির্ভর করে এটি সমাধান হওয়ার চেয়ে আরও বেশি সমস্যা সৃষ্টি করতে পারে তবে কমপক্ষে এটি আপনাকে আপনার সেশনটি পুনরায় শুরু করার অনুমতি দেবে যেমন আপনি কখনই ছাড়েন নি।
কিভাবে ব্যবহার করে :
screen
প্রথম শুরুর জন্য কমান্ডটি ব্যবহার করুন, পরিচিতি বার্তার মাধ্যমে স্ক্রোল করুন, আপনাকে একটি টার্মিনাল হস্তান্তর করা উচিত।screen -r
এই সেশনটি পুনরায় শুরু করতে ব্যবহার করতে পারেন । আপনার একবারে একাধিক বিচ্ছিন্ন স্ক্রিন সেশন থাকতে পারে, এক্ষেত্রে আপনাকে উপলভ্য সেশনের একটি তালিকা প্রদর্শিত হবে।আরও অনেক অপশন রয়েছে, উদাহরণস্বরূপ বিভক্ত স্ক্রিনগুলি এবং সমস্ত শর্টকাটগুলি সম্পূর্ণ কাস্টমাইজযোগ্য।
সহজ উত্তর ...
ctrl + z চলমান প্রোগ্রামটি স্থগিত করবে
"বিজি" এটি পটভূমিতে চালাবে
disown
বা কিছু দিয়ে nohup
), এটি সাধারণত এসএসএইচ অধিবেশন শেষে প্রক্রিয়াটি চালিয়ে রাখবে না।
যদিও প্রত্যেকে ব্যবহার করার জন্য বলেছে disown
(আপনি ইতিমধ্যে প্রক্রিয়া শুরু করার পরে আপনার কেবলমাত্র বিকল্প রয়েছে), nohup
বা এমনকি কমান্ডটি চালানো screen
হচ্ছে, যদি আপনি কমান্ড থেকে সমস্ত আউটপুট দেখতে চান তবে দরকারী ... আমি এর অনুরাগী screen
.. আমি এখনও লিনাক্সের সাম্প্রতিক মূলধারার বিতরণ চেষ্টা করেছি এবং কাজটিকে পটভূমিতে রেখে দেওয়া এবং ছাড়ার ফলে সমস্ত প্রক্রিয়া মারা যাচ্ছে না। একটি বৈশ্বিক সেটিং বা কিছু থাকতে হবে। আমি এটি বেশ কয়েকটি পুরানো সিস্টেমে চেষ্টা করছি (স্ল্যাকওয়্যার 12) এবং আমি নিজে পরীক্ষা না করা পর্যন্ত আমার পরীক্ষার স্ক্রিপ্ট চলতে থাকবে:
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
এটি সম্পূর্ণ প্যারাওয়ের বাইরে না থাকলে। সম্ভবত কেউ ডিফল্টরূপে বাশ কীভাবে আচরণ করে সে সম্পর্কে কিছুটা আলোকপাত করতে পারে? সম্ভবত কিছু সিস্টেম প্রশাসকরা তাদের ব্যবহারকারীদের প্রক্রিয়াটি সিস্টেমকে ওভারলোডিং থেকে বাঁচাতে বৃহত শেলের উপর ডিফল্ট পরিবর্তন করে?
দুর্ভাগ্যক্রমে, একটি সমাপ্ত এসএসএইচ অধিবেশন টিএমক্স বা স্ক্রিনটি বন্ধ হয়ে যেতে পারে। এর কারণ systemd
এটি একটি সেশন থেকে লগ আউট করার পরে কোনও শিশু প্রক্রিয়া বন্ধ করে দেবে।
আপনি এই সেটিংসটি আপনার logind.conf
( /etc/systemd/logind.conf
) এ পরিবর্তন করতে পারেন :
KillUserProcesses=no
Https://unix.stackexchange.com/questions/490267 তে উত্তর দেওয়ার জন্য ধন্যবাদ ।
পরিবর্তে :
cmd options;
আগে যুক্ত করুন nohup
:
nohup cmd options &
তারপরে, আপনি কনসোল স্টাডাউট দ্বারা দেখতে সক্ষম হবেন:
tail -f nohup.out