Nohup.out না পেয়ে আমি কীভাবে নোহপ কমান্ডটি ব্যবহার করব?


309

নোহপ কমান্ড নিয়ে আমার সমস্যা আছে।

আমি যখন আমার কাজ চালাচ্ছি তখন আমার প্রচুর ডেটা থাকে। Nohup.out আউটপুটটি খুব বড় হয়ে যায় এবং আমার প্রক্রিয়াটি ধীর হয়ে যায়। Nohup.out না পেয়ে আমি এই কমান্ডটি কীভাবে চালাতে পারি?


উত্তর:


612

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, তবে এটি একটি ইনপুট ফাইল বর্ণনাকারী একটি প্রক্রিয়া তৈরি করে একটি আউটপুট প্রবাহে খোলে, সুতরাং কেবল ফাইল-এর শেষের দিকে আঘাত করার পরিবর্তে, কোনও পড়ার প্রচেষ্টা মারাত্মক "অবৈধ ফাইল বর্ণনাকারী" ত্রুটিটিকে ট্রিগার করবে।


1
প্রসঙ্গে nohup, "যদি প্রক্রিয়াটি পরে স্ট্যান্ডার্ড ইনপুট থেকে কিছু পড়ার চেষ্টা করে তবে এটি বিরতি দেবে, অপেক্ষা করে আপনি এটিকে অগ্রভাগে ফিরিয়ে আনতে এবং কিছু টাইপ করার জন্য অপেক্ষা করছেন।" ভুল বলে মনে হচ্ছে পরিবর্তে, nohup স্ট্যান্ডার্ড ইনপুট বন্ধ করে দেয় (প্রোগ্রামটি পূর্বগ্রহে চালিত হলেও কোনও ইনপুট পড়তে সক্ষম হবে না it এটি থামানো হয়নি, তবে একটি ত্রুটি কোড বা ইওএফ পাবেন)।
টিম

1
@ টিম - উত্তরটি লিনাক্সের জন্য সঠিক, তবে বিএসডি বা ওএস এক্সের পক্ষে নয়, যার ভিত্তিতে স্ট্যান্ডার্ড ইনপুট স্বয়ংক্রিয়ভাবে বন্ধ nohupহয় না । দ্রষ্টব্য যে nohupশেল বিল্টিন নয় বাইনারি ইউটিলিটি।
মার্ক রিড

নোহপ কোর্টিলের অংশ। আপনি কী বোঝাতে চান nohupলিনাক্স এবং বিএসডি বা ওএস এক্স এর বাস্তবায়ন আলাদা?
টিম

হ্যাঁ. "কোর্টিলস" নামটি একটি জিএনইউ প্যাকেজকে বোঝায়। তবে বিএসডি, ওএস এক্স, স্মার্টস / ইলুমোস এবং অনেক বাণিজ্যিক ইউনিক্স - মূলত, যারা জিএনইউর চেয়ে প্রায় দীর্ঘ ছিল - তাদের নন-জিএনইউ মূল উপযোগিতা রয়েছে। awkপৃথক, sedপৃথক, nohupপৃথক ...
মার্ক রিড

আপনি কেন "অতিরিক্ত নিরাপদ" লিখেছিলেন </dev/null? এছাড়াও 0>/dev/null unix.stackexchange.com/a/266247
টিম

68
nohup some_command > /dev/null 2>&1&

আপনার যা করা দরকার তা-ই!


4
আরও একটি উত্তর ছিল যা প্রায় একই জিনিস ছিল, তবে তাদের শেষে অতিরিক্ত "&" ছিল না।
11101101b

10
&ব্যবহার করতে প্রয়োজন থেকে আপনি রাখা হবে ctrl-c, যদি আপনি যে বিষয়।
সানস্পার্ক

1
বিজি তে চালানোর ক্ষমতাটি খুব সহায়ক
ist_lion

এটি কেবল তখনই কার্যকর যখন আপনি some_commandত্রুটি সহ আউটপুট ক্যাপচার সম্পর্কে ফ্যাসেড নন ।
উলফগারপ্রো

12

আপনি কি তিনটি আই / ও স্ট্রিমকে পুনঃনির্দেশ করার চেষ্টা করেছেন:

nohup ./yourprogram > foo.out 2> foo.err < /dev/null &

1
এটি ></ dev / নাল পরিবর্তে / dev / নাল হওয়া উচিত নয় ?
স্কট চু

3
@ স্কটচু এর < /dev/nullজন্য স্ট্যান্ডার্ড ইনপুট পুনঃনির্দেশ করে nohup। লিনাক্সের এটির প্রয়োজন হয় না তবে পসিক্স এমন আচরণের অনুমতি দেয় যেখানে nohupস্ট্যান্ডার্ড ইনপুটটি টার্মিনালের সাথে সংযুক্ত থাকলে পটভূমিতে চলতে পারে না। এই জাতীয় সিস্টেমগুলির উদাহরণগুলি হল বিএসডি এবং ওএস এক্স
মিক্কো রেন্টালাইনেন

8

আপনি বিচ্ছিন্নতা প্রোগ্রামটি ব্যবহার করতে পারেন । আপনি এটির মতো ব্যবহার 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.

দ্রষ্টব্য প্রোগ্রামটির লেখকের সাথে আমার কোনও সম্পর্ক নেই। আমি প্রোগ্রামটির একমাত্র সন্তুষ্ট ব্যবহারকারী।


2
লিঙ্কটি ভাঙা হয়নি এবং সেই গিট রেপোটি পুরানো। এটিতে বর্তমানে v0.2.3 অন্তর্ভুক্ত নেই।
ড্যান ডি

5

কমান্ড অনুসরণ করে nohup.out না পেয়ে পটভূমিতে কিছু চালাতে দেবে:

nohup command |tee &

এইভাবে, আপনি রিমোট সার্ভারে স্ক্রিপ্ট চলাকালীন কনসোল আউটপুট পেতে সক্ষম হবেন: এখানে চিত্র বর্ণনা লিখুন


4
sudo bash -c "nohup /opt/viptel/viptel_bin/log.sh $* &> /dev/null"  &

সুডোর আউটপুট পুনর্নির্দেশের ফলে পাসওয়ার্ডের জন্য পুনরায় পুনঃনির্ধারণের জন্য সুডোর কারণ হয়, সুতরাং এই বৈকল্পিকটি করার জন্য একটি বিশ্রী প্রক্রিয়া প্রয়োজন।


1

আপনার সামনে যদি আপনার ম্যাক / লিনাক্সে একটি BASH শেল থাকে তবে আপনি পুনঃনির্দেশটি ব্যবহারিকভাবে বুঝতে নীচের পদক্ষেপগুলি ব্যবহার করে দেখুন:

Zz.sh নামে একটি 2 লাইনের স্ক্রিপ্ট তৈরি করুন

#!/bin/bash
echo "Hello. This is a proper command"
junk_errorcommand
  • ইকো কমান্ডের আউটপুট STDOUT ফাইল প্রবাহে চলে যায় (ফাইলের বর্ণনাকারী 1)।
  • ত্রুটি কমান্ডের আউটপুটটি STDERR ফাইলধারায় যায় (ফাইলের বর্ণনাকারী 2)

বর্তমানে, স্ক্রিপ্টটি সম্পাদন করেই 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

ব্যাখ্যা:

  • প্রথম, zfile.txt এ STDOUT 1 প্রেরণ করুন
  • তারপরে, STDERR 2 প্রেরণ করুন নিজেই STDOUT 1 এ (& 1 পয়েন্টার ব্যবহার করে)।
  • সুতরাং, 1 এবং 2 উভয়ই একই ফাইলে যায় (zfile.txt)

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

nohup zz.sh 1> zfile.txt 2>&1&

1

আপনি নীচের কমান্ড চালাতে পারেন।

nohup <your command> & >  <outputfile> 2>&1 &

যেমন স্ক্রিপ্টের ভিতরে আমার নোহপ কমান্ড রয়েছে

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