আমি কি একই সময়ে কোনও প্রক্রিয়া কোনও লগ ফাইল এবং পটভূমিতে পুনর্নির্দেশ করতে পারি?


116

আমি কি একই সময়ে কোনও প্রক্রিয়া কোনও লগ ফাইল এবং পটভূমিতে পুনর্নির্দেশ করতে পারি?

অন্য কথায়, আমি কি এই জাতীয় কিছু করতে পারি?

nohup java -jar myProgram.jar 2>&1 > output.log &

বা, এটি কি আইনী আদেশ নয়? অথবা, আমাকে কী এটিকে ম্যানুয়ালি পটভূমিতে সরানো দরকার:

java -jar myProgram.jar 2>$1 > output.log
jobs
[CTRL-Z]
bg 1

2
আপনি কি এটা চেষ্টা করেছেন? আপনি কি ত্রুটি পেতে পারি? এছাড়াও আমি নিশ্চিত নই যে আপনার টাইপো আছে, না আপনার কোডটিতে ত্রুটি আছে। 2>$1সম্ভবত হতে অনুমিত হয় 2>&1
প্যাট্রিক

উত্তর:


171

আপনার প্রথম কমান্ডের একটি সমস্যা হ'ল আপনি স্ট্ডারকে যেখানে স্টাডআউট (পুনরায় আপনি যদি মন্তব্যে প্রস্তাবিত হিসাবে একটি a এ পরিবর্তন করেছেন) তে পুনঃনির্দেশিত করেন এবং তারপরে আপনি স্টাডআউটটি কিছু লগ ফাইলে পুনঃনির্দেশিত করেছেন, তবে এটি পুনঃনির্দেশিত স্ট্যাডারকে ধরে টানবে না । আপনাকে এটি অন্য ক্রমে অবশ্যই করতে হবে, প্রথমে আপনি যেখানে যেতে চান সেখানে stdout প্রেরণ করুন এবং তারপরে stdrre ঠিকানার ঠিকানাতে পাঠান

some_cmd > some_file 2>&1 &

এবং তারপরে আপনি এটিকে পটভূমিতে প্রেরণ করতে ছুড়ে দিতে পারেন। jobsকমান্ড দিয়ে কাজগুলি অ্যাক্সেস করা যায় । jobsআপনাকে চলমান কাজগুলি প্রদর্শন করবে এবং তাদের সংখ্যাটি দেবে। তারপরে আপনি একটি% ব্যবহার করে কাজগুলি সম্পর্কে কথা বলতে পারেন তার পরে kill %1বা তার মতো সংখ্যা অনুসরণ করে ।

এছাড়াও, শেষ প্রান্তে ছাড়া আপনি কমান্ডটি স্থগিত করতে পারেন Ctrlz, bgএটি পটভূমিতে fgরাখতে এবং অগ্রভাগে ফিরিয়ে আনতে কমান্ডটি ব্যবহার করতে পারেন । jobsকমান্ডের সাথে সম্মিলিতভাবে , এটি শক্তিশালী।

আপনি যে আদেশগুলি লিখেছেন সে সম্পর্কে উপরের অংশটি স্পষ্ট করতে। ধরুন দ্বারা stderr ঠিকানা 1002 হয়, stdout- এ ঠিকানা 1001, এবং ফাইল 1008. কমান্ড বাম থেকে ডানে পড়া, তাই প্রথম জিনিস পায় মধ্যে আপনার 2>&1কোন ঠিকানাটি 1001 থেকে দ্বারা stderr চলে আসে, তারপর দেখেন > fileযা 1008 থেকে stdout- এ চলে তবে স্ট্যাডারটি 1001 এ রাখে It এটি 1001 এ নির্দেশিত সমস্ত কিছুই টেনে তোলে না এবং এটি 1008 এ স্থানান্তরিত করে না, তবে কেবল স্টডআউটকে রেফার করে এবং এটি ফাইলটিতে সরিয়ে দেয়।
অন্য উপায়ে, এটি স্টাডাউটটি 1008 এ চলে যায় এবং তারপরে স্টার্ডারটি সেই বিন্দুতে চলে আসে যে স্টাডাউট 1008 এর দিকেও নির্দেশ করছে। এইভাবে উভয়ই একক ফাইলটিতে নির্দেশ করতে পারে।


এর পরে $!
পিড

8
লক্ষণীয় বিষয়: আপনি &> file.outস্টিন এবং স্টডআউট উভয়ই একটি আউটপুট ফাইলে পুনর্নির্দেশ করতে পারেন , যা 2>&1আপনার কমান্ড লাইনে ভুল জায়গায় রেখে ভুলের সম্ভাবনা হ্রাস করে ।
ড্যান

14

সাথে <Ctrl+Z>ব্যাকগ্রাউন্ডে থামানো এবং চালিয়ে যাওয়া কমান্ডের শেষে bgকার্যকর করার সমতুল্য &

সুতরাং, পটভূমি চালানোর জন্য এবং আউটপুট পুনঃনির্দেশ:

java -jar myProgram.jar 2> errorOutput.log > output.log &

আপনি যদি টার্মিনালটি ছেড়ে যাওয়ার সময় এই কমান্ডটি মারা না যায় তাও আপনার প্রয়োজন হয় then nohup


আচ্ছা বুঝলাম. আপনি সংযুক্ত 'এবং' চরটি অপ্রয়োজনীয় বলছেন?
জাঙ্গোফান

আমি কেবল ম্যানপেজটি উদ্ধৃত করছি। যেহেতু nohup যাহাই হউক না কেন পটভূমিতে কমান্ড চালানো হবে, পটভূমি নিজেই nohup চালানো অপ্রয়োজনীয় বলে মনে হয়
RSFalcon7

10
নোহুপ ব্যাকগ্রাউন্ডে কমান্ডটি কার্যকর করে না, আপনাকে স্পষ্টভাবে সংযোজন করতে হবে&
jlliagre

3
আপনি কোনও প্রক্রিয়াটি ব্যাকগ্রাউন্ডে স্থানান্তরিত করার পরে bg, এটি চালিয়ে আপনার সেশন থেকে আলাদা করতে পারেন, এটি disownআপনাকে টার্মিনালটি বন্ধ করার পরে প্রক্রিয়াটি মারা যায় না।
কোয়েন

14
java -jar myProgram.jar &> output.log &

লক্ষ্য করুন যে &>স্টডআউট এবং স্টডার উভয়ই আউটপুট.লগকে নির্দেশ দেয়


3
একটি লাইনের ব্যাখ্যা উত্তরটি সম্পূর্ণ করে দেবে।
অনাইক

2
@ অভিষেকনইক ৯6 এটি জার ফাইলটি চালায় এবং স্টিডিন এবং স্ট্ডার উভয়কে আউটপুট.লগে পুনর্নির্দেশ করে এটি ব্যাকগ্রাউন্ড প্রক্রিয়া তৈরি করে।
পি পাং

2

নোহুপ ব্যবহার না করে আপনি পর্দা ব্যবহার করতে পারেন। আপনি বাস্তব সময়ে প্রোগ্রামের স্থিতি দেখতে পারেন। এমনকি আপনি কোনও আউটপুট কোনও ফাইলে লগ করতে পারেন। আপনি যখন ssh এর মাধ্যমে সার্ভারটি অ্যাক্সেস করেন তখন কার্যকর হয় যেখানে দুর্বল সংযোগ বা নিষ্ক্রিয়তার কারণে আপনি লগ আউট করেছেন। লগ ইন করার পরে আপনি যেখানেই চলে গেছেন সেখান থেকে কাজ চালিয়ে যেতে পারেন। বিস্তারিত জানার জন্য এটি এবং এটি উল্লেখ করুন ।


1

teeকমান্ড খুব সুন্দর প্রচলিত।

nohup java -jar myProgram.jar | tee output.log &

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