একটি নামী পাইপ ফ্লাশিং


2

লগ ফাইলটিতে যাওয়া প্রতিটি লাইনে তারিখ সংযোজন করার সময় আমি আমার স্ক্রিপ্ট থেকে টার্মিনাল এবং লগ ফাইল উভয়কে পুনর্নির্দেশের জন্য নিম্নলিখিতটি ব্যবহার করছি:

NPIPE=/tmp/$$_$RANDOM.tmp  
mknod $NPIPE p  
tee <$NPIPE /dev/tty | ( while read line; do echo "$(date): ${line}"; done ) >> $LOG_FILE &
exec 1>&-  
exec 1>$NPIPE  
exec 2>&-  
exec 2>$NPIPE  

এখন এই একই স্ক্রিপ্টে আমি একটি সার্ভারে লগ ফাইল আপলোড করি। স্থানীয় ডিভাইসে লগ ফাইল (এম্বেড করা) সম্পূর্ণ দেখায়, তবে সার্ভারে লগ ফাইলটি সর্বদা আংশিক থাকে।

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

কোন পরামর্শ?


এটি বুদ্ধিমান বা ভাল অনুশীলন কিনা জানেন না তবে আপনি কি syncআপনার সার্ভারে আপলোড করার আগে ব্যবহার করার চেষ্টা করেছেন ?
এমপি

আপনি সার্ভারে ফাইলটি কীভাবে পাঠাচ্ছেন?
psusi

প্রথমে, পুনর্নির্মাণের জন্য আপনাকে ধন্যবাদ। এমপি, অল্টফো অবশ্যই একটি ভাল অনুশীলন নয় (যেমন আপনি নিজের উল্লেখ করেছেন) তবে এটি আমি প্রথম চেষ্টা করেছিলাম। এটা কোন ভাল করেনি।
ব্যবহারকারীর 2323217

psusi - আমি টিএফটিপি বা এফটিপি ব্যবহার করছি (কনফিগারেশন ফাইলের উপর নির্ভর করে), আপনি কি মনে করেন যে এই ক্ষেত্রে পরিবহন পদ্ধতির কোনও প্রাসঙ্গিকতা রয়েছে?
ব্যবহারকারী223217

উত্তর:


2

আমি বিশ্বাস করি যে আপনাকে পাইপটি বন্ধ করতে হবে:

exec 1>&-
exec 2>&-

তারপরে, লগ ফাইল আপলোড করার পরে, আপনাকে একটি নতুন teeপ্রক্রিয়া শুরু করতে হবে :

tee <$NPIPE /dev/tty | ( while read line; do echo "$(date): ${line}"; done ) >> $LOG_FILE &
exec 1>$NPIPE
exec 2>$NPIPE

আপনাকে ধন্যবাদ স্কট। আমি আপনাকে বলতে যাচ্ছিলাম যে আমি ইতিমধ্যে চেষ্টা করেছি যে - আমি মনে করি মনে হয়েছে, পাইপটিতে সমস্ত লেখাগুলি বন্ধ করার ফলে পাঠকরা ইওএফ বা এই জাতীয় কিছু পেয়ে যাবেন। যাইহোক এটি আবার চেষ্টা করে দেখুন এটি কাজ করে। গতবার এটি করার পরেও আমি এটি অনেকগুলি পরিবর্তনের সাথে মিশ্রিত করেছি। ধন্যবাদ!
ব্যবহারকারীর 2323217

দেখে মনে হচ্ছে আপনার উত্তরটি ভোট দেওয়ার মতো যথেষ্ট খ্যাতি আমার নেই :(
ইউজার ২৩২২২217

অনুসরণ করুন - যদিও আমি এটি গ্রহণযোগ্য উত্তর হিসাবে রাখছি তবে আমি অন্য সিদ্ধান্তে পৌঁছেছি। দেখে মনে হচ্ছে যে এই কাজটি করার চেষ্টা করার পরে আমার পক্ষে এই কারণটি হ'ল আমি লেখকদের পাইপটিতে বন্ধ করার পরে স্ক্রিপ্টে একটি স্লিপ কমান্ড রেখেছিলাম যাতে টি প্রক্রিয়াটি মারা যায় তা দেখার সুযোগ পান। তবে মনে হয় ঘুম সেখানে রেখে (ঘুম 1) এবং পুনর্নির্দেশটি সরিয়ে ফেলা এটি ঠিক একই সমাধান করে, বিপরীত কাজ করার সময় (পাইপটি বন্ধ করে দেয়, পরে ঘুম আসে না)! আমি কিছুটা বিভ্রান্ত কিন্তু এটিকে একদম বিবেচনা করি। আপাতত আমার স্ক্রিপ্টে দুজনকেই রেখেছি।
ব্যবহারকারীর 2323217

এটি বোঝায় যে একটি sleepসাহায্য করবে; যেহেতু লগ ফাইলটিতে যে পাইপলাইনটি লেখা হচ্ছে তা অবিচ্ছিন্ন (পটভূমিতে চলমান), আপনি এটি ইওএফ সনাক্ত করার এবং এটিতে প্রতিক্রিয়া জানানোর (ফ্লাশ বাফার এবং প্রস্থান) করার সুযোগ দিতে চান। আমি খানিকটা অবাক হয়েছি যে sleepএকা যথেষ্ট, তবে আমি আনন্দিত যে আপনি এমন কিছু সাধারণ খুঁজে পেয়েছেন যা আপনার পক্ষে কার্যকর।
স্কট

স্কট ব্যাখ্যার জন্য আপনাকে ধন্যবাদ। আমি একমত যে একাকী ঘুমও এই কাজটি করে ফেলেছে তা অবাক করার মতো বিষয়, তবে প্রাক্তন এফডাব্লু বিকাশকারী হিসাবে আমি ঘুমের উপর নির্ভর করি বা বুদ্ধিমানের অপেক্ষার অন্য কোনও উপায়, বাগের রেসিপি। সুতরাং যতক্ষণ না আমার কাছে আরও ভাল বিকল্প না থাকে আমি উভয়ই করছি, অর্থাৎ লেখকদের বন্ধ করুন, ঘুমান, তারপরে একটি নতুন টি প্রক্রিয়া শুরু করুন (লগ করতে কোনও নতুন ইনপুট ধরতে, এই সার্ভারে প্রেরণ করা হবে না তা ভাল করে জেনে) এবং কেবল তখনই লগটি প্রেরণ করুন।
user223217
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.