আমার একটি প্রোগ্রাম রয়েছে যা দরকারী তথ্য তৈরি করে stdout
তবে তা থেকেও পড়ে stdin
। আমি স্ট্যান্ডার্ড ইনপুটটিতে কোনও সরবরাহ না করেই এর স্ট্যান্ডার্ড আউটপুটটিকে কোনও ফাইলে পুনর্নির্দেশ করতে চাই। এখন পর্যন্ত, এত ভাল: আমি এটি করতে পারি:
program > output
আর tty তে কিছু করবেন না।
তবে সমস্যাটি হ'ল আমি এটি ব্যাকগ্রাউন্ডে করতে চাই। যদি আমি করি:
program > output &
প্রোগ্রামটি স্থগিত হয়ে যাবে ("স্থগিত (টিটি ইনপুট)")।
যদি আমি করি:
program < /dev/null > output &
প্রোগ্রামটি তত্ক্ষণাত বন্ধ হয়ে যায় কারণ এটি ইওএফ পৌঁছায়।
দেখে মনে হচ্ছে যে আমার যা দরকার তা হ'ল এমন program
কিছুতে পাইপ করা যা অনির্দিষ্ট সময়ের জন্য কিছু করে না এবং পড়ে না stdin
। নিম্নলিখিত পদ্ধতির কাজ:
while true; do sleep 100; done | program > output &
mkfifo fifo && cat fifo | program > output &
tail -f /dev/null | program > output &
যাইহোক, এটি সব খুব কুরুচিপূর্ণ। সেখানে রয়েছে একটি মার্জিত উপায় হতে, মানক ইউনিক্স ইউটিলিটি ব্যবহার করে, "কিছুই করতে, অনির্দিষ্টকালের জন্য" থেকে (ভাষান্তর করার man true
)। আমি কীভাবে এটি অর্জন করতে পারি? (এখানে কমনীয়তার জন্য আমার প্রধান মাপদণ্ড: কোনও অস্থায়ী ফাইল নেই; ব্যস্ত-অপেক্ষার বা পর্যায়ক্রমিক জাগরণের ব্যবস্থা নেই; কোনও বহিরাগত ইউটিলিটি নেই যতটা সম্ভব সংক্ষিপ্ত))
su -c 'while true; do true; done | cat > ~/output &' user
?
1<&-
এটি আপনার প্রোগ্রাম থেকে প্রস্থান করবে?
su -c 'program | output &' user
। আমি "পরিষেবা / ডেমন" পরিচালনা করার জন্য গ্রহণযোগ্য পদ্ধতি হিসাবে পটভূমি কাজ তৈরির সাথে একই ধরণের প্রশ্ন করতে চলেছি। আমি আরও লক্ষ্য করেছি যে আমি পুনর্নির্দেশSTDERR
ছাড়াও পুনর্নির্দেশ করতে পারি নাSTDOUT
। সমাধান যেখানে प्रोग्रामএ প্রোগ্রাম বিতে প্রেরণSTDOUT
করেSTDIN
, তারপরেSTDERR
একটি লগ ফাইলে পুনঃনির্দেশ করে:programA 2> /var/log/programA.log | programB 2> /var/log/programB.log 1> /dev/null