ক্র্যাশ লগ সহ আমার একটি ডিরেক্টরি রয়েছে এবং আমি ফাইন্ড কমান্ডের উপর ভিত্তি করে ব্যাশ স্ক্রিপ্টে শর্তযুক্ত বিবৃতি ব্যবহার করতে চাই।
লগ ফাইলগুলি এই ফর্ম্যাটে সংরক্ষণ করা হয়:
/var/log/crashes/app-2012-08-28.log
/var/log/crashes/otherapp-2012-08-28.log
আমি চাই যদি বিবৃতিটি কেবলমাত্র সত্য ফিরে আসে তবে নির্দিষ্ট অ্যাপের জন্য ক্র্যাশ লগ থাকে যা শেষ 5 মিনিটে পরিবর্তিত হয়েছে। find
কমান্ড যে আমি ব্যবহার করেন হল:
find /var/log/crashes -name app-\*\.log -mmin -5
আমি নিশ্চিত না যে কীভাবে এটি একটি if
বিবৃতিতে সঠিকভাবে অন্তর্ভুক্ত করা যায় । আমি মনে করি এটি কার্যকর হতে পারে:
if [ test `find /var/log/crashes -name app-\*\.log -mmin -5` ] then
service myapp restart
fi
কয়েকটি অঞ্চল রয়েছে যেখানে আমি অস্পষ্ট:
- আমি যদি পতাকাগুলি দেখেছি তবে আমার কোনটি ব্যবহার করা উচিত তা নিশ্চিত নই।
- আমার কি
test
নির্দেশিকা দরকার বা আমার সন্ধানের আদেশের ফলাফলের বিরুদ্ধে সরাসরি প্রক্রিয়া করা উচিত, অথবাfind... | wc -l
পরিবর্তে কোনও লাইন গণনা পেতে ব্যবহার করা উচিত? - এই প্রশ্নের উত্তর দেওয়ার জন্য 100% প্রয়োজনীয় নয়, তবে
test
কি রিটার্ন কোডের বিপরীতে পরীক্ষা করার জন্য? তারা অদৃশ্য সাজানোর রয়েছে - বাইরেstdout
/stderr
? আমিman
পৃষ্ঠাটি পড়েছি তবে কখন ব্যবহার করবtest
এবং কীভাবে এটি ডিবাগ করা যায় সে সম্পর্কে এখনও আমি অস্পষ্ট ।
... -exec command ';' -quit
, তবে আমি বিশ্বাস করি না যে ফলাফলটি বিশ্লেষণ করা ছাড়া দ্বিতীয়টির জন্য কোনও সমাধান আছে। এছাড়াও, উভয় ক্ষেত্রেই, ফলাফলের পার্সিংয়ের সাথে প্রাথমিক সমস্যা find
(অর্থাত্ ফাইলের অক্ষরগুলির মধ্যে ডেলিফিটরগুলি পৃথক করতে অক্ষম) প্রযোজ্য না, কারণ এই ক্ষেত্রে আপনাকে ডিলিমিটারগুলি খুঁজে পাওয়ার দরকার নেই।
find ... -exec
। উদাহরণস্বরূপ কমান্ডগুলি নীচে দেখুন কেন ফাইন্ডের আউটপুটটি খারাপ অভ্যাসের উপর নির্ভর করে?