এই আর্টিকেলে দেখানো হবে কিভাবে লিনাক্স (উবুন্টু সহ) শেলে কমান্ড ব্যাকগ্রাউন্ডে চালানো যায়। এটি রিমোট SSH কাজ করার সময় খুব কাজে আসে।
মান लीজিয়ে আপনি SSH দিয়ে একটি রিমোট কম্পিউটারের সাথে কানেক্টেড আছেন, এবং একটি লেনদেন টাস্ক এক্সিকিউট করতে চান।
টাস্ক চলাকালীন সাধারণত আপনাকে কানেকশন ওপেন রেখে টার্মিনাল উইন্ডো খোলা রাখতে হতো। কিন্তু এটি কষ্টদায়ক যদি আপনাকে অন্য কাজের জন্য উইন্ডো বন্ধ করতে হয় বা ইন্টারনেট কানেকশন স্পটি হয় যা কানেকশন বিচ্ছিন্ন করতে পারে।
যদি উইন্ডো বন্ধ হয় বা কানেকশন হারায়, তবে রিমোট কম্পিউটারে কমান্ড এক্সিকিউশন বন্ধ হয়ে যেতে পারে।
কমান্ডটিকে ব্যাকগ্রাউন্ডে চালালে এটি এড়ানো যায় — কানেকশন/সেশন খোলা থাকুক বা না, এটি চলতে থাকবে।
স্ক্রিপ্টে ব্যাকগ্রাউন্ডে কমান্ড পাঠালেও কাজে আসে যদি আপনি একটি কমান্ড এক্সিকিউট করতে চান কিন্তু তার সম্পূর্ণ হওয়া অপেক্ষা করতে না চান এবং পরে আউটপুট দরকার নেই।
& ব্যবহার করে কমান্ড ব্যাকগ্রাউন্ডে চালানো
লিনাক্সে কমান্ড ব্যাকগ্রাউন্ডে চালানো সহজ — আপনার কমান্ডের শেষে & ক্যারেক্টার যোগ করুন:
your_command_here &
উদাহরণস্বরূপ, নিচের কমান্ড দুটি ফাইল জিপ করে — কমান্ডটি ব্যাকগ্রাউন্ডে চলে, তাই আপনাকে এরা पूरा হওয়া অপেক্ষা করতে হয় না অন্য কমান্ড চালানোর জন্য:
zip archive.zip file1 file2 &
সহজ! আউটপুট নিচের মতো দেখাবে:
[1] 3001
…যা কাজটি (এই কেসে [1]) এবং প্রসেস আইডি (এই কেসে 3001) ইন্ডিকেট করে যা ব্যাকগ্রাউন্ডে এক্সিকিউট হচ্ছে।
যখন কাজটি পুরো হয়ে যাবে (বা ফেইল করলে), জবের স্ট্যাটাস আউটপুট হবে:
[1] + done zip archive.zip file1 file2
ব্যাকগ্রাউন্ড জবের আউটপুট হাইড করা
কমান্ডটি ব্যাকগ্রাউন্ডে চলাকালীন আউটপুট টার্মিনালে প্রিন্ট হতে থাকবে।
আপনি যদি এটিকে হাইড রাখতে চান (যাতে অন্যান্য কাজে বাধা না দেয়) — স্ট্যান্ডার্ড রিডাইরেকশন ব্যবহার করে আউটপুট সাপ্রেস করতে পারেন।
your_command > /dev/null 2>&1 &
- উপরে, > কমান্ডের STDOUT (স্ট্যান্ডার্ড আউটপুট) /dev/null-এ রিডাইরেক্ট করছে।
- কমান্ডের STDERR (স্ট্যান্ডার্ড এরর আউটপুট) 2>&1 দিয়ে STDOUT-এ রিডাইরেক্ট হচ্ছে যাতে সেটিও /dev/null-এ যায়।
- /dev/null মানে আউটপুট কোথাও যাচ্ছে না। এটি গিয়ে গেছে, হাইড, শূন্যতায়।
চলমান ব্যাকগ্রাউন্ড জব লিস্ট করা
বর্তমানে চলমান ব্যাকগ্রাউন্ড জব লিস্ট করতে jobs কমান্ড ব্যবহার করুন:
jobs -l
এটি চলমান ব্যাকগ্রাউন্ড জবের লিস্ট দেখাবে — প্রতিটি এন্ট্রি নিচের মতো দেখাবে:
[1] + 3601 running ping 8.8.8.8 > /dev/null 2>&1
উপরে, কমান্ড ping 8.8.8.8 > /dev/null 2>&1 জব আইডি ১ এবং প্রসেস আইডি ৩৬০১ দিয়ে ব্যাকগ্রাউন্ডে চলছে।
ব্যাকগ্রাউন্ড জব বন্ধ করা
kill কমান্ড টাস্ক বন্ধ করে:
kill 3601
… এতে ব্যাকগ্রাউন্ড জবের প্রসেস আইডি দিন, এটি বন্ধ (kill) করবে।
সেশন ইন্টারাপ্ট হলোও ব্যাকগ্রাউন্ড জব চালু রাখা
এটি সম্ভবত সবচেয়ে উপকারী অংশ।
একটি কমান্ড চালু থাকতে দেয়া যাক, আপনি উইন্ডো বন্ধ করলেও, কানেকশন ড্রপ করলেও, বা সেশন অন্যভাবে ইন্টারাপ্ট হলোও — এর জন্য ব্যাকগ্রাউন্ড জবকে disown কমান্ড দিয়ে ডিসআউন করতে হবে।
disown %1
উপরে, জব আইডি 1 এর ব্যাকগ্রাউন্ড জব ডিসআউন করা হয়েছে। এটি করেন্ট শেল থেকে ডিসকানেক্ট হয়েছে এবং তখনও চলতে থাকবে যতক্ষণ না এটি শেষ হয় বা এরর পায় বা KILL কমান্ড দিয়ে বন্ধ করা হয়।
সকল রানিং প্রসেস লিস্ট করার এই আর্টিকেল চেক করুন — ডিসআউন করা টাস্ক ট্র্যাক করতে হলে এটা দরকার পড়তে পারে।
চলমান কমান্ডকে ব্যাকগ্রাউন্ডে নেওয়া
একটি চলমান কমান্ডকে ব্যাকগ্রাউন্ডে নেওয়ার জন্য সেটি সাসপেন্ড করে তারপর ব্যাকগ্রাউন্ডে নিতে হয়।
এটি করতে, কমান্ড চলাকালীন CTRL + Z চাপুন। আপনি দেখবেন:
suspended command_name
…যা কনফার্ম করে যে কমান্ডটি সাসপেন্ড হয়েছে।
তারপর bg কমান্ড লিখে কমান্ডটি ব্যাকগ্রাউন্ডে চালান:
bg
আপনি দেখবেন:
continued command_name
…যা কনফার্ম করে যে কমান্ডটি এখন ব্যাকগ্রাউন্ডে চলছে।