কিভাবে পটভূমিতে একটি প্রোগ্রাম শুরু করবেন


9

প্রোগ্রামটি ববলাইট পটভূমিতে চলবে না। মৃত্যুদন্ড কার্যকর করার মধ্যে কোনও লক্ষণীয় পার্থক্য নেই

sudo boblightd

এবং

sudo boblightd& 

এই সমস্যাটি কীভাবে সমাধান করতে পারি যে কনসোলটি আরও ইনপুটগুলি ব্লক করবে না?

pi@raspberrypi ~/boblight/boblightd-for-raspberry-master $ sudo boblightd
Boblightd 2.0 (optimized version for raspberry) (c) 2013 Speedy1985 and Heven)
(InitLog)                       start of log /root/.boblight/boblightd.log
(PrintFlags)                    starting boblightd
(CConfig::LoadConfigFromFile)   opening /etc/boblight.conf
(CConfig::CheckConfig)          checking config lines
(CConfig::CheckConfig)          config lines valid
(CConfig::BuildConfig)          building config
(CConfig::BuildConfig)          built config successfully
(main)                          starting devices
(CClientsHandler::Process)      opening listening TcpSocket on *:19333
(CDevice::Process)              ambilight: starting with output "/dev/spidev0.0"
(CDevice::Process)              ambilight: setting up
(CDevice::Process)              ambilight: setup succeeded


pi@raspberrypi ~/boblight/boblightd-for-raspberry-master $ sudo boblightd&
[1] 2289
pi@raspberrypi ~/boblight/boblightd-for-raspberry-master $
Boblightd 2.0 (optimized version for raspberry) (c) 2013 Speedy1985 and Heven)
(InitLog)                       start of log /root/.boblight/boblightd.log
(PrintFlags)                    starting boblightd
(CConfig::LoadConfigFromFile)   opening /etc/boblight.conf
(CConfig::CheckConfig)          checking config lines
(CConfig::CheckConfig)          config lines valid
(CConfig::BuildConfig)          building config
(CConfig::BuildConfig)          built config successfully
(main)                          starting devices
(CClientsHandler::Process)      opening listening TcpSocket on *:19333
(CDevice::Process)              ambilight: starting with output "/dev/spidev0.0"
(CDevice::Process)              ambilight: setting up
(CDevice::Process)              ambilight: setup succeeded

8
বলুন:sudo boblightd > /dev/null 2>&1 &
ডিভনল

আপনি যদি শেখার উদ্দেশ্যে এটি না করে থাকেন তবে ব্যবহার করুন dmenu। এটি সহজ এবং কাজটি বেশ ভালভাবে করে।
নিশান্ত

উত্তর:


22

[1] 2289আপনার পটভূমি কমান্ড শো পর এটা কাজ, এবং প্রকৃতপক্ষে পটভূমি মধ্যে রাখা হয়।

আপনি পুনর্নির্দেশ না করে তবে আপনার কমান্ডের আউটপুট টার্মিনালে চলে যাবে। এটি করার জন্য এখানে বিস্তৃত উপায়:

sudo boblightd >std.txt 2>err.txt &

আপনি যদি স্টডআউট এবং স্টাডার উভয়ই একই ফাইলে যেতে চান:

sudo boblightd >std.txt 2>&1 &

এবং অবশ্যই, যদি আপনি উভয় বা উভয় স্ট্রিমের আউটপুট সম্পর্কে চিন্তা না করেন তবে আপনি /dev/nullকোনও ফাইলের পরিবর্তে প্রেরণ করতে পারেন ।

sudo boblightd >/dev/null 2>err.txt &

(এই উদাহরণটি স্ট্যান্ডার্ড আউটপুট ফেলে দেয়, তবে স্টাডার রাখে, যদি কিছু ভুল হয় তবে))


হালনাগাদ

উপরেরগুলি বব্লাইটল্ড কী তা সম্পর্কে কোনও জ্ঞানের ভিত্তিতে নয়। আমি অন্য উত্তরে দেখছি এটির একটি ডেমন মোড রয়েছে, যাতে এটি এই ক্ষেত্রে পরিবর্তে ব্যবহার করা উচিত।

বিটিডাব্লু, উপরের অনুমানগুলি sudoএকটি পাসওয়ার্ডের জন্য প্রম্পট করবে না এবং আপনি টার্মিনাল উইন্ডোটি বন্ধ করবেন না। প্রাক্তনদের জন্য, আমি ব্যক্তিগতভাবে sudo bashতখন সাধারণত ব্যবহার করি , টাইপ করতাম boblightd >std.txt 2>err.txt &sudo lsঅ্যাক্সেস ক্যাশে হয়েছে তা নিশ্চিত করার জন্য অন্য উপায়টি হ'ল বা কোনও ক্ষতিকারক আদেশ।

পরবর্তীকালের জন্য, nohupআপনি ভবনটি ছেড়ে যাওয়ার পরেও এটি চলমান থাকবে তা নিশ্চিত করার জন্য যাদু কমান্ডটি কি? এটি sudoআসল কমান্ডের আগে এবং তার আগে চলত। যেমন sudo nohup boblightd >std.txt 2>err.txt &। বা sudo bashতারপরে nohup boblightd >std.txt 2>err.txt &, তারপরে exit(মূল শেলটি ছেড়ে যেতে)।


এটি লক্ষণীয়ও গুরুত্বপূর্ণ যে যদি sudoপাসওয়ার্ডের জন্য প্রম্পট করার চেষ্টা করা হয় তবে এটি ব্যর্থ হবে কারণ পটভূমি প্রক্রিয়াগুলি STDIN পড়তে পারে না।
প্যাট্রিক

ধন্যবাদ @ পেট্রিক আমি প্রশ্নের তাত্ক্ষণিক সমস্যার বিষয়ে সবেমাত্র উত্তর দিয়েছি, তবে এটি কিছুটা মনোযোগ পাচ্ছে বলে আমি পাসওয়ার্ড প্রম্পট এবং নোহআপের উল্লেখ করে আপডেট করেছি।
ড্যারেন কুক

5

আমি মনে করি আপনি নোহপ কমান্ডটি এভাবে ব্যবহার করতে পারেন:

nohup sudo boblightd &

এটি আপনার কমান্ডের আউটপুট বর্তমান ডিরেক্টরিতে nohup.out ফাইল এ দেবে।

এছাড়াও আপনি এর মতো স্ক্রিন কমান্ড ব্যবহার করতে পারেন: প্রথমে একটি স্ক্রিন তৈরি করুন:

screen -S your-sreen-name

তারপরে আপনার আদেশটি চালান:

sudo boblightd

স্ক্রিনটি সংরক্ষণ করতে এবং টার্মিনালে ফিরে যেতে, টাইপ করুন Ctrl+AD(এর Ctrl+Aজন্য screenআপনি কী কিছু করতে চান তার ইঙ্গিতটি এবং Dতারপরে এটি বন্ধ না করে সেশন থেকে "d" এ্যাচেস করুন)।

আপনার পর্দা পুনরুদ্ধার:

screen -d -r your-screen-name

4

এগুলি লুকানোর জন্য আপনাকে স্টাডআউট এবং স্টাডারকে তাদের ডিফল্টের চেয়ে অন্য কোনও দিকে পুনঃনির্দেশ করতে হবে। @ ডিভনুলের মন্তব্য দেখায় যে এটি কীভাবে করা যায়। এটি প্রথম পদক্ষেপ।

আপনি যদি সহজেই &আপনার প্রোগ্রামটি আলাদা করতে ব্যবহার করেন তবে আপনি লগআউট করার সময় এটি স্বয়ংক্রিয়ভাবে মারা যাবে। এটি সম্ভবত আপনি চান না। এটি nohupরোধ করতে আপনাকে কমান্ডটি ব্যবহার করতে হবে :

nohup sudo boblightd > boblight.out 2> boblight.err < /dev/null &

নোটটি sudoসম্ভবত কোনও পাসওয়ার্ডের জন্য জিজ্ঞাসা করবে: এটি কোনও পাবেন না এবং প্রতিটি আউটপুট / ইনপুট পুনঃনির্দেশিত হওয়ায় আপনি এটির জন্য আপনাকে জিজ্ঞাসা করবেন না notice যাইহোক এটি অর্জনের জন্য আপনার বিভিন্ন সমাধান রয়েছে:

  • sudoআগে একটি কমান্ড চালান , sudoআপনার পাসওয়ার্ড সংরক্ষণ করবে। এটাই চটজলদি উপায়।
  • মুছে ফেলুন &, sudoপাসওয়ার্ড দিন, তারপরে প্রক্রিয়াটি প্রেক্ষাপটে প্রেরণ করুন CTRL + Z
  • এই নির্দিষ্ট ব্যবহারকারী এবং এক্সিকিউটেবল দম্পতির পাসওয়ার্ড না জিজ্ঞাসা করতে sudo কনফিগারও করতে পারেন। সচেতন থাকুন যে এটি সম্ভাব্য সুরক্ষা লঙ্ঘন হতে পারে,…

এরপরের আগে নোহোপ রাখা কি ভাল sudo? আপনি sudoযখন এটির পাসওয়ার্ডটি চালাবেন তখন এটি কীভাবে পাসওয়ার্ড পাবেন nohup?
অ্যারন দিগুল্লা

1
ঠিক আছে, এটি একটি ভাল পয়েন্ট: এটি হবে না। আপনার এখানে একাধিক সমাধান রয়েছে: আগে একটি sudo কমান্ড চালান, sudo আপনার পাসওয়ার্ডটি সংরক্ষণ করবে। এটাই চটজলদি উপায়। আর একটি হ'ল অপসারণ করা &, sudoপাসওয়ার্ড দেওয়া এবং তারপরে প্রক্রিয়াটি প্রেক্ষাপটে প্রেরণ করা ctrl + z। আপনি sudoএই নির্দিষ্ট ব্যবহারকারী এবং সম্পাদনযোগ্য দম্পতির জন্য পাসওয়ার্ড জিজ্ঞাসা না করার জন্যও কনফিগার করতে পারেন ।

(আমি এটি উত্তরে যুক্ত করেছি))

আমি সাধারণত করি sudo bash, তারপরে nohupনতুন শেলের ভিতরে থেকে কমান্ডটি চালান ।

আসলে এটি ভুল যে আপনি যদি &ব্যাকগ্রাউন্ডটি কেবল প্রক্রিয়াটি ব্যবহার করেন তবে এটি লগআউটে মারা যাবে। কেবলমাত্র যদি সাইনআপের সাথে বাশ হত্যা করা হয় তবেই এটি আপনার প্রোগ্রামটি সাইনআপ করবে। কিন্তু লগ আউট সাইনআপের কারণ নয়। আপনি যদি logoutCTRL + D টাইপ করেন বা ব্যবহার করেন তবে ব্যাশ প্রস্থান করবে এবং প্রক্রিয়াটি চালিয়ে যাবে। আপনি যখন জিইআইতে টার্মিনাল এমুলেটরটি বন্ধ করেন সাইনআপ পাঠানো হয়।
প্যাট্রিক

2

Boblightd

ববলাইটের ক্ষেত্রে স্টার্ডারের কাছে প্রেরিত আউটপুটটি ইতিমধ্যে এটির লগ ফাইলে ( a / .boblight / boblightd.log এ ডিফল্ট ) ক্যাপচার করা হয়েছে , সুতরাং এটি ক্যাপচার করার দরকার নেই এবং তা ফেলে দেওয়া যেতে পারে। এছাড়াও, boblight ডিফল্টরূপে মাল না কিন্তু করতে দ্বারা অন্তর্ভুক্ত করা যেতে পারে -f কমান্ড হবে।

আমি আপনাকে নিম্নলিখিতটি চেষ্টা করার পরামর্শ দিচ্ছি:

sudo boblightd -f >/dev/null 2>/dev/null

( প্রকল্পের ডকুমেন্টেশন থেকে বিশদ )

আরো সাধারণভাবে

শেল থেকে শুরু হওয়া প্রক্রিয়াগুলি শেলটি প্রস্থান করার সাথে সাথে শেষ হবে। যেমন অন্যরা Ctrl-Zঅগ্রভাগে কোনও প্রক্রিয়া চালানোর সময় ব্যবহারের দিকে লক্ষ্য রেখেছিল তেমন শেলটিতে নিয়ন্ত্রণ ফিরে আসে। যাইহোক, প্রক্রিয়াটি এই মুহুর্তে একটি থামানো অবস্থায় স্থাপন করা হয় । bg কমান্ড প্রক্রিয়া আবার চলমান পেতে কিন্তু ব্যাকগ্রাউন্ডে থাকার প্রয়োজন হবে। এটির জন্য কোনও প্রক্রিয়া আইডি বা চাকরির নম্বর প্রয়োজন (যথারীতি কাজের নম্বরগুলি% এর সাথে পূর্বনির্ধারিত হয়), সুতরাং আপনার দ্বিতীয় উদাহরণটি ব্যবহার করে আপনি তা প্রকাশ করবেন

bg %1

অথবা

bg 2289

প্রক্রিয়াটি এখন পটভূমিতে চলবে তবে শেলের সাথে সংযুক্ত রয়েছে। শেলটির লিঙ্কটি disownকমান্ডটি ব্যবহার করে বিভক্ত করা যেতে পারে , যা নোহপ / সুডোর সাথে বিভ্রান্তি রক্ষা করে। পাশাপাশি bg, disownকেবলমাত্র প্রক্রিয়া আইডি বা কাজের নম্বর প্রয়োজন

যেমন

disown 2289

আপনি এখন শেলটি নিরাপদে প্রস্থান করতে পারবেন যেন আপনি nohupকমান্ডটি দিয়ে প্রক্রিয়াটি চালিয়েছেন


1

উত্তরটি ইতিমধ্যে মন্তব্যে বেশ অনেকগুলি নির্দিষ্ট করা হয়েছে। আমি অনুভব করেছি যে এটির আসল উত্তর হিসাবে এটি সম্পর্কে কিছুটা ব্যাখ্যা পোস্ট করা ভাল।

যাওয়ার উপায় হ'ল: sudo boblightd > /dev/null 2>&1 &

এখানে 3 টি গুরুত্বপূর্ণ অংশ রয়েছে। সর্বাধিক গুরুত্বপূর্ণ &লাইন শেষ হয়। এটি শেলটি ফিরে নিয়ন্ত্রণ দেওয়ার আগে কমান্ডটি শেষ হওয়ার অপেক্ষা না করে not এটি কীবোর্ড থেকে স্ট্যান্ডার্ড ইনপুটও নিয়ে যায়। এটি পটভূমিতে কাজ রাখে।

তবে এটি এখনও আউটপুটটি কনসোলে ফিরে যেতে পারে। এটি প্রতিরোধের জন্য এমন >প্রতীক রয়েছে যা মানক আউটপুট পুনঃনির্দেশ করে ( /dev/nullএই ক্ষেত্রে)।

এই মুহুর্তে আপনি এখনও কমান্ড গেট স্ক্রিন থেকে আউটপুট পেতে পারেন। এটি স্ট্যান্ডার্ড ত্রুটি হবে। তাই শেষ পর্যন্ত 2>&1যাদু আছে। এই আউটপুটটিকে স্ট্যান্ডার্ড ত্রুটি স্ট্রিম থেকে স্ট্যান্ডার্ড আউটপুটে পুনঃনির্দেশ করে।

2এবং 1স্ট্যান্ডার্ড ফাইল বর্ণনাকারী থেকে আসে। 0হবে stdin, 1- stdout- এ, 2- দ্বারা stderr।

আপনার যদি প্রয়োজন হয় তবে কোনও ফাইলে আউটপুট পুনর্নির্দেশ করতে পারেন।

ব্যাক গ্রাউন্ডে কাজের সাথে ইন্টারঅ্যাক্ট করার জন্য নকশাকৃত কমান্ড রয়েছে। jobsএবং fg

প্রয়োজনে আপনি আরও উন্নত সমাধান যেমন screenকমান্ডের সাথে খেলতে পারেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.