پرش به محتویات

تمرین ۷: پایپ‌لاین خطاگیر

صورت سؤال

در یک سیستم چند سرویس مختلف لاگ‌های خود را در دایرکتوری ~/logs ذخیره می‌کنند. فایل‌هایی که با الگوی service-*.log نام‌گذاری شده‌اند ممکن است پیام‌های خطا داشته باشند. هدف شما ساخت یک پایپ‌لاین است که اطلاعات زیر را استخراج کند:

  1. همهٔ فایل‌های مطابق الگو را بخوانید و فقط خطوطی که عبارت ERROR دارند فیلتر کنید.
  2. تعداد کل پیام‌های خطا را بشمارید و نتیجه را در فایلی به نام error-count.txt بنویسید.
  3. همزمان باید همان خروجی فیلترشده روی صفحه نمایش داده شود تا بتوانید خطاها را مشاهده کنید.
  4. برای اطمینان، پیام‌های خطای فیلتر شده را نیز در فایلی به نام errors-full.log ذخیره کنید؛ درصورتی که فایل از قبل وجود داشته باشد باید به انتهای آن اضافه شود.

شرایط

  • فرض کنید ابزار gzip به صورت دوره‌ای فایل‌ها را فشرده می‌کند. لازم است پایپ شما فقط فایل‌های متنی بدون فشرده‌سازی (پسوند .log) را پردازش کند.
  • اگر دستور شما هنگام اجرا با خطایی مواجه شد، پیام خطا باید در فایلی با نام pipeline-errors.log ذخیره شود تا بعداً بررسی شود.

راهنمایی

  • برای جلوگیری از نمایش پیام‌های خطا روی صفحه، از تغییر مسیر 2> استفاده کنید.
  • دستور tee می‌تواند خروجی را همزمان در فایل و ترمینال چاپ کند؛ برای افزودن به فایل از گزینهٔ -a استفاده کنید.
  • ترکیب cat, grep, wc -l, tee و تغییر مسیر جریان‌ها یک راه‌حل متداول برای چنین تمرینی است. هدف نهایی ساخت یک پایپ‌لاین قابل‌اعتماد و قابل‌خواندن است.