কিছু কমান্ড চালানোর সময় একটি প্রক্রিয়া থেকে লগগুলি পড়ুন


10

আমার কিছু পরিষেবা রয়েছে যা ফাইলটিতে লগ তৈরি করে logs.log

আমার আরও কিছু কমান্ড রয়েছে যা এই পরিষেবার সাথে ইন্টারঅ্যাক্ট করে। বলি এটি কিছু foo.sh

আমার যা দরকার তা হ'ল দৌড়ানোর logs.logসময় থেকে লগগুলি কেটে ফেলা এবং সংরক্ষণ করা foo.sh। অন্য কথায় আমার যখন সেটার সাথে যোগাযোগ করে তখন সেবার লগগুলির সেই অংশটি আমার প্রয়োজন foo.sh(যাতে আমি foo.shলগগুলি সম্পর্কে চিন্তা করি না )।

আমি আশা করব যে এই কমান্ডটি কৌশলটি করবে তবে এটি foo.shইতিমধ্যে শেষ হয়ে গেলে ফাইলটি পড়া চালিয়ে যায় :

> foo.sh | tail -f logs.log > foo_part.log

এই কৌশলটি সম্পাদন করার কোনও দুর্দান্ত উপায় কি?

উত্তর:


12

আপনার ব্যাকগ্রাউন্ড প্রসেসগুলি, ভাল, ব্যাকগ্রাউন্ডে প্রেরণ করে এটি সরাসরি তৈরি করা হয়েছে:

foo.sh &
mypid=$!
tail -f /path/to/logs.log > /path/to/partial.log &
tailpid=$!
wait $mypid
kill -TERM $tailpid

$!যেমনটি গত কাজের pid, ব্যাকগ্রাউন্ডে রান পাঠানো তাই আমরা যা করতে পারেন waitআপনার স্ক্রিপ্টের উপর ফিনিস, এবং তারপর প্রক্রিয়া যখন আমরা আর এটি প্রয়োজন।killtail


3
দুর্দান্ত উত্তর, আজ নতুন কিছু শিখলেন
মিগুয়েল মোটা

7

এই সংস্করণটি এটিও করতে পারে (আমার মনে হয়):

( tail -f logs.log >foo_part.log &
foo.sh&
wait $! && kill %1 ) 

নোট করুন যে% 1 সাবসেলের প্রথম পটভূমি প্রক্রিয়াটি হিট করবে


ব্যক্তিগতভাবে, আমি জব রোস্টার ব্যবহার না করে সুস্পষ্ট পিআইডি ক্যাপচার করতে পছন্দ করি, কারণ এটির ক্রমবর্ধমান জটিল বাস্তবায়ন ব্যাকগ্রাউন্ডে একাধিক টাস্ক ফেলে kill %1দিতে পারে এবং ভুল লক্ষ্য পেতে পারে।
ডোপঘোতি

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