مانیتورینگ، لاگ، nginx و bash پیشرفته

زمان‌بندی کارها با cron و مدیریت لاگ با logrotate

خودکارسازی وظایف تکراری

cron قدیمی‌ترین و ساده‌ترین ابزار زمان‌بندی در لینوکس است. هر خط در جدول cron از پنج فیلد زمانی و یک دستور تشکیل شده است: دقیقه، ساعت، روز ماه، ماه، روز هفته.

› ویرایش جدول cron کاربر جاری
crontab -e

› اجرای اسکریپت هر روز ساعت ۲ نیمه‌شب
0 2 * * * /opt/scripts/backup.sh

› اجرای هر ۱۵ دقیقه یک‌بار
*/15 * * * * /opt/scripts/healthcheck.sh

› مشاهده جدول cron فعلی
crontab -l

یکی از مشکلات رایج در محیط تولید، رشد بی‌رویه فایل‌های لاگ است که می‌تواند کل فضای دیسک را پر کند. logrotate ابزاری است که به‌صورت خودکار فایل‌های لاگ را چرخش می‌دهد، فشرده می‌کند و پس از مدتی حذف می‌کند. پیکربندی آن معمولاً در /etc/logrotate.d/ قرار دارد:

/var/log/myapp/*.log {
    daily
    rotate 14
    compress
    missingok
    notifempty
    create 0640 appuser appuser
}

این پیکربندی می‌گوید: لاگ‌ها روزانه چرخش پیدا کنند، تا ۱۴ نسخه قبلی نگه‌داری شود، نسخه‌های قدیمی فشرده شوند، نبود فایل خطا محسوب نشود، و فایل خالی چرخش نخورد. logrotate معمولاً از طریق یک cron یا systemd timer روزانه به‌صورت خودکار اجرا می‌شود و نیازی به دخالت دستی ندارد؛ فقط باید مطمئن شوید هر سرویسی که لاگ تولید می‌کند، پیکربندی مناسب خودش را دارد.

یک نکته مهم در ترکیب logrotate با سرویس‌هایی که فایل لاگ را باز نگه می‌دارند (مثل nginx یا یک برنامه سفارشی) این است که فقط تغییر نام فایل کافی نیست؛ خود برنامه باید از بستن و باز کردن مجدد فایل لاگ باخبر شود، وگرنه همچنان به فایل قدیمی (که دیگر نامی ندارد) می‌نویسد. به همین دلیل بلوک‌های logrotate معمولاً یک دستورالعمل postrotate دارند که پس از چرخش، سیگنالی مثل SIGHUP را به سرویس مربوطه ارسال می‌کند تا فایل لاگ جدید را باز کند؛ این همان کاربرد عملی سیگنال‌هایی است که در فصل اول درباره‌شان صحبت کردیم.

برای ذخیره‌ی پیشرفت و شرکت در آزمون، وارد شوید — رایگان است.