উত্তর:
nohup
কমান্ড শুধুমাত্র লিখেছেন nohup.out
যদি আউটপুট অন্যথায় টার্মিনালে যেতে হবে। আপনি যদি কমান্ডের আউটপুট অন্য কোথাও পুনঃনির্দেশ করে থাকেন - সহ /dev/null
- যেখানে এটি পরিবর্তে চলে।
nohup command >/dev/null 2>&1 # doesn't create nohup.out
আপনি যদি ব্যবহার করে থাকেন তবে এর nohup
অর্থ সম্ভবত আপনি &
পুরো জিনিসটির শেষে অন্যটি রেখে পটভূমিতে কমান্ডটি চালাতে চান :
nohup command >/dev/null 2>&1 & # runs in background, still doesn't create nohup.out
লিনাক্সে, কোনও কাজ চালানো nohup
স্বয়ংক্রিয়ভাবে তার ইনপুটটিও বন্ধ করে দেয়। অন্যান্য সিস্টেমে, উল্লেখযোগ্যভাবে বিএসডি এবং ম্যাকোস, এটি নয়, তাই পটভূমিতে চলার সময় আপনি ম্যানুয়ালি ইনপুট বন্ধ করতে চাইতে পারেন। ইনপুট বন্ধ করার ফলে সৃষ্টির উপর কোনও প্রভাব নেই বা এর প্রভাব নেই nohup.out
, এটি অন্য একটি সমস্যা এড়ায়: কোনও পটভূমি প্রক্রিয়া যদি স্ট্যান্ডার্ড ইনপুট থেকে কিছু পড়ার চেষ্টা করে তবে এটি বিরতি দেবে, আপনাকে অপেক্ষা করে অগ্রণীতে ফিরিয়ে আনবে এবং কিছু টাইপ করবে। সুতরাং অতিরিক্ত-সুরক্ষিত সংস্করণটি এর মতো দেখাচ্ছে:
nohup command </dev/null >/dev/null 2>&1 & # completely detached from terminal
তবে নোট করুন, এটি কমান্ডটি সরাসরি টার্মিনালটিতে প্রবেশ করতে বাধা দেয় না বা এটি আপনার শেলের প্রসেস গ্রুপ থেকে সরিয়ে দেয় না। আপনি যদি পরবর্তীটি করতে চান এবং আপনি বাশ, কেএসএস বা জেডএস চালাচ্ছেন disown
তবে পরবর্তী আদেশ হিসাবে কোনও যুক্তি ছাড়াই আপনি এটি চালিয়ে যেতে পারেন । এর অর্থ হ'ল পটভূমি প্রক্রিয়া আর শেল "কাজ" এর সাথে সম্পর্কিত নয় এবং শেল থেকে এটিতে কোনও সংকেত ফরোয়ার্ড করা হবে না। (পার্থক্যটি দ্রষ্টব্য: একটি disown
এড প্রক্রিয়াটি তার প্যারেন্ট শেল দ্বারা স্বয়ংক্রিয়ভাবে কোনও সংকেত ফরোয়ার্ড পায় না - তবে এটি ছাড়াও nohup
এটি HUP
অন্য মাধ্যমে যেমন একটি ম্যানুয়াল kill
কমান্ডের মাধ্যমে প্রেরিত সংকেত পাবে A nohup
'এড প্রক্রিয়াটি কোনও এবং সমস্ত HUP
সংকেত উপেক্ষা করে , তারা কীভাবে প্রেরণ করা হয় তা নির্বিশেষে))
ব্যাখ্যা:
ইউনিক্সি সিস্টেমে ইনপুট বা আউটপুট টার্গেটের প্রতিটি উত্সের সাথে এটির সাথে যুক্ত রয়েছে যা "ফাইল বর্ণনাকারী" বা সংক্ষেপে "এফডি" বলে। প্রতিটি চলমান প্রোগ্রামের ("প্রক্রিয়া") এর নিজস্ব সেট থাকে এবং একটি নতুন প্রক্রিয়া শুরু হলে এর মধ্যে তিনটি ইতিমধ্যে খোলা থাকে: "স্ট্যান্ডার্ড ইনপুট", যা fd 0 হয়, প্রক্রিয়াটি পড়ার জন্য উন্মুক্ত থাকে, যখন "স্ট্যান্ডার্ড আউটপুট" (এফডি 1) এবং "স্ট্যান্ডার্ড ত্রুটি" (এফডি 2) এতে লেখার জন্য উন্মুক্ত। আপনি যদি কেবল একটি টার্মিনাল উইন্ডোতে একটি কমান্ড চালান, তবে ডিফল্টরূপে, আপনি টাইপ করুন যে কোনও কিছুই তার স্ট্যান্ডার্ড ইনপুটতে চলে যায়, যখন এর স্ট্যান্ডার্ড আউটপুট এবং স্ট্যান্ডার্ড ত্রুটি উভয়ই সেই উইন্ডোতে প্রেরণ করা হয়।
তবে আপনি শেলটি পরিবর্তনের জন্য জিজ্ঞাসা করতে পারেন যেখানে এই ফাইল বর্ণনাকারীর কোনও বা কমান্ড চালু করার আগে নির্দেশিত হয়েছে; যে কি ফেরৎ ( <
, <<
, >
, >>
) এবং নল ( |
) অপারেটরদের না।
পাইপ এগুলির মধ্যে সহজতম ... command1 | command2
এর স্ট্যান্ডার্ড আউটপুটটির command1
সরাসরি স্ট্যান্ডার্ড ইনপুটটিতে ফিড দেওয়ার ব্যবস্থা করে command2
। এটি একটি খুব সহজ ব্যবস্থা যা ইউনিক্স সরঞ্জামগুলিতে একটি নির্দিষ্ট নকশার প্যাটার্নের দিকে পরিচালিত করে (এবং স্ট্যান্ডার্ড ত্রুটির অস্তিত্বের ব্যাখ্যা দেয় যা কোনও প্রোগ্রামটিকে ব্যবহারকারীকে বার্তা প্রেরণ করতে সক্ষম করে যদিও এর আউটপুটটি পাইপলাইনে পরবর্তী প্রোগ্রামে চলে যাওয়ার পরে) । তবে আপনি কেবল স্ট্যান্ডার্ড আউটপুটকে স্ট্যান্ডার্ড ইনপুট থেকে পাইপ করতে পারেন; আপনি কোনও জাগলিং ছাড়া কোনও পাইপের কাছে অন্য কোনও ফাইল বর্ণনাকারী প্রেরণ করতে পারবেন না।
পুনঃনির্দেশ অপারেটররা আরও বন্ধুত্বপূর্ণ যে তারা আপনাকে কোনও ফাইল বর্ণনাকারীকে পুনঃনির্দেশ করতে হবে তা নির্দিষ্ট করতে দেয়। সুতরাং 0<infile
নামের ফাইলটি থেকে স্ট্যান্ডার্ড ইনপুট পড়ুন infile
, যখন নামের ফাইলটির 2>>logfile
শেষে মান ত্রুটি যুক্ত করে logfile
। যদি আপনি কোনও নম্বর উল্লেখ না করেন তবে ইনপুট পুনর্নির্দেশটি ডিফল্ট এফডি 0 ( <
এর সমান 0<
) হয়, যখন আউটপুট পুনর্নির্দেশকে এফডি 1-তে ডিফল্ট হয় ( >
একই হয় 1>
)।
এছাড়াও, আপনি ফাইল বর্ণনাকারী একসাথে একত্রিত করতে পারেন: এর 2>&1
অর্থ "যেখানে স্ট্যান্ডার্ড আউটপুট চলছে সেখানে স্ট্যান্ডার্ড ত্রুটি পাঠান"। এর অর্থ আপনি আউটপুটের একক স্ট্রিম পান যার মধ্যে স্ট্যান্ডার্ড আউট এবং স্ট্যান্ডার্ড ত্রুটি উভয়ই আলাদা করার কোনও উপায় ছাড়াই অন্তর্নিহিত রয়েছে, তবে এর অর্থ হ'ল আপনি কোনও পাইপে স্ট্যান্ডার্ড ত্রুটি অন্তর্ভুক্ত করতে পারেন।
সুতরাং ক্রমটির >/dev/null 2>&1
অর্থ "প্রমিত স্ট্যান্ডার্ড আউটপুট প্রেরণ করুন /dev/null
" (এটি একটি বিশেষ ডিভাইস যা আপনি যা লিখবেন তা কেবল ফেলে দেয়) "এবং তারপরে যেখানে স্ট্যান্ডার্ড আউটপুট যাচ্ছে সেখানে স্ট্যান্ডার্ড ত্রুটি প্রেরণ করুন" (যা আমরা নিশ্চিত করেছিলাম /dev/null
) made মূলত, "এই আদেশটি ফাইল বর্ণনাকারী উভয়কেই যা লিখে দেয় তা ফেলে দিন"।
যখন nohup
সনাক্ত করে যে এটির কোনও ত্রুটি বা আউটপুট কোনও টার্মিনালের সাথে সংযুক্ত নেই, এটি তৈরি করা বিরক্ত করে না nohup.out
, তবে ধরে নেওয়া হয় যে ব্যবহারকারী যেখানে যেতে চায় সেখানে আউটপুটটি ইতিমধ্যে পুনঃনির্দেশিত হয়েছে।
/dev/null
ডিভাইস, খুব ইনপুট জন্য কাজ করে; যদি আপনি কমান্ডটি চালনা করে থাকেন </dev/null
তবে স্ট্যান্ডার্ড ইনপুট থেকে পড়ার জন্য সেই আদেশের যে কোনও প্রচেষ্টা তত্ক্ষণাত্ ফাইলটির শেষের সাথে দেখা করবে। মনে রাখবেন যে মার্জ সিনট্যাক্সের এখানে একই প্রভাব থাকবে না; এটি কেবলমাত্র একই ফাইল (ইনপুট বা আউটপুট) খোলার জন্য অন্য কোনও ফাইল বর্ণনাকারীকে নির্দেশ করতে কাজ করে। শেলটি আপনাকে করতে দেবে >/dev/null <&1
, তবে এটি একটি ইনপুট ফাইল বর্ণনাকারী একটি প্রক্রিয়া তৈরি করে একটি আউটপুট প্রবাহে খোলে, সুতরাং কেবল ফাইল-এর শেষের দিকে আঘাত করার পরিবর্তে, কোনও পড়ার প্রচেষ্টা মারাত্মক "অবৈধ ফাইল বর্ণনাকারী" ত্রুটিটিকে ট্রিগার করবে।
nohup
, "যদি প্রক্রিয়াটি পরে স্ট্যান্ডার্ড ইনপুট থেকে কিছু পড়ার চেষ্টা করে তবে এটি বিরতি দেবে, অপেক্ষা করে আপনি এটিকে অগ্রভাগে ফিরিয়ে আনতে এবং কিছু টাইপ করার জন্য অপেক্ষা করছেন।" ভুল বলে মনে হচ্ছে পরিবর্তে, nohup
স্ট্যান্ডার্ড ইনপুট বন্ধ করে দেয় (প্রোগ্রামটি পূর্বগ্রহে চালিত হলেও কোনও ইনপুট পড়তে সক্ষম হবে না it এটি থামানো হয়নি, তবে একটি ত্রুটি কোড বা ইওএফ পাবেন)।
nohup
হয় না । দ্রষ্টব্য যে nohup
শেল বিল্টিন নয় বাইনারি ইউটিলিটি।
nohup
লিনাক্স এবং বিএসডি বা ওএস এক্স এর বাস্তবায়ন আলাদা?
awk
পৃথক, sed
পৃথক, nohup
পৃথক ...
</dev/null
? এছাড়াও 0>/dev/null
unix.stackexchange.com/a/266247
nohup some_command > /dev/null 2>&1&
আপনার যা করা দরকার তা-ই!
&
ব্যবহার করতে প্রয়োজন থেকে আপনি রাখা হবে ctrl-c
, যদি আপনি যে বিষয়।
some_command
ত্রুটি সহ আউটপুট ক্যাপচার সম্পর্কে ফ্যাসেড নন ।
আপনি কি তিনটি আই / ও স্ট্রিমকে পুনঃনির্দেশ করার চেষ্টা করেছেন:
nohup ./yourprogram > foo.out 2> foo.err < /dev/null &
>
</ dev / নাল পরিবর্তে / dev / নাল হওয়া উচিত নয় ?
< /dev/null
জন্য স্ট্যান্ডার্ড ইনপুট পুনঃনির্দেশ করে nohup
। লিনাক্সের এটির প্রয়োজন হয় না তবে পসিক্স এমন আচরণের অনুমতি দেয় যেখানে nohup
স্ট্যান্ডার্ড ইনপুটটি টার্মিনালের সাথে সংযুক্ত থাকলে পটভূমিতে চলতে পারে না। এই জাতীয় সিস্টেমগুলির উদাহরণগুলি হল বিএসডি এবং ওএস এক্স
আপনি বিচ্ছিন্নতা প্রোগ্রামটি ব্যবহার করতে পারেন । আপনি এটির মতো ব্যবহার nohup
করেন তবে এটির না বললে এটি আউটপুট লগ তৈরি করে না। ম্যান পেজটি এখানে:
NAME
detach - run a command after detaching from the terminal
SYNOPSIS
detach [options] [--] command [args]
Forks a new process, detaches is from the terminal, and executes com‐
mand with the specified arguments.
OPTIONS
detach recognizes a couple of options, which are discussed below. The
special option -- is used to signal that the rest of the arguments are
the command and args to be passed to it.
-e file
Connect file to the standard error of the command.
-f Run in the foreground (do not fork).
-i file
Connect file to the standard input of the command.
-o file
Connect file to the standard output of the command.
-p file
Write the pid of the detached process to file.
EXAMPLE
detach xterm
Start an xterm that will not be closed when the current shell exits.
AUTHOR
detach was written by Robbert Haarman. See http://inglorion.net/ for
contact information.
দ্রষ্টব্য প্রোগ্রামটির লেখকের সাথে আমার কোনও সম্পর্ক নেই। আমি প্রোগ্রামটির একমাত্র সন্তুষ্ট ব্যবহারকারী।
sudo bash -c "nohup /opt/viptel/viptel_bin/log.sh $* &> /dev/null" &
সুডোর আউটপুট পুনর্নির্দেশের ফলে পাসওয়ার্ডের জন্য পুনরায় পুনঃনির্ধারণের জন্য সুডোর কারণ হয়, সুতরাং এই বৈকল্পিকটি করার জন্য একটি বিশ্রী প্রক্রিয়া প্রয়োজন।
আপনার সামনে যদি আপনার ম্যাক / লিনাক্সে একটি BASH শেল থাকে তবে আপনি পুনঃনির্দেশটি ব্যবহারিকভাবে বুঝতে নীচের পদক্ষেপগুলি ব্যবহার করে দেখুন:
Zz.sh নামে একটি 2 লাইনের স্ক্রিপ্ট তৈরি করুন
#!/bin/bash
echo "Hello. This is a proper command"
junk_errorcommand
বর্তমানে, স্ক্রিপ্টটি সম্পাদন করেই STDOUT এবং STDERR উভয়ই স্ক্রিনে প্রেরণ করে।
./zz.sh
এখন স্ট্যান্ডার্ড পুনঃনির্দেশ দিয়ে শুরু করুন:
zz.sh > zfile.txt
উপরের অংশে, "প্রতিধ্বনি" (STDOUT) zfile.txt এ যায়। যেখানে "ত্রুটি" (এসটিডিআরআর) স্ক্রিনে প্রদর্শিত হয়।
উপরেরটি একই:
zz.sh 1> zfile.txt
এখন আপনি বিপরীতে চেষ্টা করতে পারেন এবং "ত্রুটি" STDERR ফাইলে পুনর্নির্দেশ করতে পারেন। "প্রতিধ্বনি" কমান্ড থেকে STDOUT স্ক্রিনে যায়।
zz.sh 2> zfile.txt
উপরের দুটি সংমিশ্রণ, আপনি পাবেন:
zz.sh 1> zfile.txt 2>&1
ব্যাখ্যা:
অবশেষে, আপনি পুরো জিনিসটি নোহপ কমান্ডের মধ্যে এবং এটি ব্যাকগ্রাউন্ডে চালাতে প্যাক করতে পারেন :
nohup zz.sh 1> zfile.txt 2>&1&