خودکارسازی وظایف تکراری
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 را به سرویس مربوطه ارسال میکند
تا فایل لاگ جدید را باز کند؛ این همان کاربرد عملی سیگنالهایی است که در فصل اول دربارهشان صحبت کردیم.