Logrotate یک ابزار سیستمی است که مدیریت چرخش و فشردهسازی خودکار فایلهای لاگ را بر عهده دارد. اگر فایلهای لاگ به صورت منظم چرخش و فشرده نشوند و همچنین پاکسازی نشوند، ممکن است در نهایت تمام فضای دیسک سیستم را اشغال کنند.
Logrotate به طور پیشفرض روی اوبونتو 20.04 نصب است و برای رفع نیازهای چرخش لاگ تمامی بستههای نصب شده، از جمله rsyslog که پردازشگر پیشفرض لاگهای سیستم است، پیکربندی شده است.
در این مقاله ابتدا ساختار پیکربندی پیشفرض Logrotate را بررسی میکنیم و سپس نحوه پیکربندی چرخش لاگ برای یک برنامهٔ سفارشی فرضی را آموزش میدهیم.
این آموزش فرض میکند که شما یک سرور اوبونتو 20.04 دارید و با یک کاربر غیر روت دارای دسترسی sudo وارد سیستم شدهاید، مطابق با مراحل آموزش اولیه سرور اوبونتو 20.04.
Logrotate در بسیاری از توزیعهای لینوکس قابل استفاده است، اما پیکربندی پیشفرض ممکن است متفاوت باشد. سایر بخشهای این آموزش تا زمانی که نسخه Logrotate شما مشابه اوبونتو 20.04 باشد کاربرد دارد. قدم اول بررسی نسخه Logrotate است.
برای شروع، با کاربر دارای دسترسی sudo وارد سرور خود شوید.
نصب Logrotate
Logrotate به صورت پیشفرض روی اوبونتو نصب است. اما اگر نیاز به نصب داشتید، با اجرای دستورات زیر فهرست بستهها را بروزرسانی و Logrotate را نصب کنید:
sudo apt update
sudo apt install logrotateاگر از سروری غیر اوبونتو استفاده میکنید، ابتدا مطمئن شوید Logrotate نصب است با درخواست نمایش نسخه:
logrotate --versionاگر نسخه نصب شده تفاوت زیادی با نسخه اوبونتو داشت، ممکن است برخی گزینههای پیکربندی آموزش داده شده کار نکند. برای اطلاع دقیقتر، مستندات نسخه خود را با دستور زیر بخوانید:
man logrotateمیتوانید نسخه آنلاین مستندات را نیز از این لینک مطالعه کنید:
https://www.man7.org/linux/man-pages/man8/logrotate.8.html
بررسی ساختار پیکربندی پیشفرض Logrotate در اوبونتو
پیکربندی Logrotate معمولاً در دو مکان زیر قرار دارد:
/etc/logrotate.conf/etc/logrotate.d/
به صورت پیشفرض، فایل logrotate.conf چرخش لاگها را به صورت هفتگی تنظیم میکند. فایلهای لاگ توسط کاربر root و گروه syslog مالکیت دارند و چهار نسخه قدیمی نگهداری میشود (rotate 4). همچنین پس از چرخش، فایل لاگ جدیدی خالی ساخته میشود (create).
بیایید فایل پیکربندی بسته apt را در مسیر /etc/logrotate.d/ بررسی کنیم:
cat /etc/logrotate.d/aptاین فایل شامل بلوکهای پیکربندی دو فایل لاگ در مسیر /var/log/apt/ است: term.log و history.log. هر دو گزینههای مشابهی دارند. تنظیماتی که در این بلوکها تعریف نشده باشد، از /etc/logrotate.conf به ارث میرسد. تنظیمات موجود برای لاگهای apt عبارتند از:
- چرخش هفتگی
- نگهداری چهار فایل لاگ قبلی
- ساخت فایل جدید پس از چرخش
این فایلهای پیکربندی همچنین رفتار پیشفرض create را به ارث میبرند که باعث ساخت یک فایل لاگ جدید پس از چرخش میشود. میتوان این گزینه را با nocreate تغییر داد، اما این کار به طور موثر بیشتر قابلیتهای دیگر را غیرفعال خواهد کرد.
گزینههای پیکربندی فراوانی وجود دارد که میتوانید با اجرای دستور man logrotate آنها را مشاهده کنید.
پیکربندی چرخش لاگ برای یک برنامه سفارشی
برای مدیریت فایلهای لاگ برنامههای خارج از خدمات سیستمی پیشفرض، دو راه داریم:
- اضافه کردن فایل پیکربندی در
/etc/logrotate.d/ - ساخت یک فایل پیکربندی مستقل خارج از ساختار پیشفرض
بیایید این دو روش را با مثال بررسی کنیم.
روش اول: افزودن پیکربندی به /etc/logrotate.d/
فرض کنید یک وبسرور فرضی دارید که در مسیر /var/log/your-app/ دو فایل لاگ access.log و error.log ایجاد میکند. این برنامه با کاربر و گروه www-data اجرا میشود.
برای افزودن پیکربندی، ابتدا فایلی جدید در /etc/logrotate.d/ بسازید، مثلاً your-app:
sudo nano /etc/logrotate.d/your-appو محتوای زیر را وارد کنید:
/var/log/your-app/*.log {
weekly
missingok
rotate 4
compress
delaycompress
notifempty
create 640 www-data www-data
sharedscripts
postrotate
systemctl reload your-app.service > /dev/null 2>&1 || true
endscript
}توضیح برخی دستورات:
weekly: چرخش هفتگیmissingok: در صورت نبودن فایل خطا ندهدrotate 4: نگهداری چهار نسخه قدیمیcompress: فشرده کردن فایلهای قدیمیdelaycompress: فشردهسازی با تاخیر (نسخه جدیدترین را فشرده نمیکند)notifempty: اگر فایل خالی باشد چرخش نکندcreate 640 www-data www-data: ساخت فایل جدید با پرمیشن 640 و مالک www-datasharedscripts: اجرای اسکریپتهای پس از چرخش فقط یک بارpostrotate ... endscript: دستور reload سرویس پس از چرخش
برای ذخیره در nano کلیدهای Ctrl+X و سپس Y و Enter را بزنید.
برای تست پیکربندی جدید، دستور dry-run را اجرا کنید:
sudo logrotate /etc/logrotate.conf --debugخروجی نشان میدهد چه فایلهایی چرخش خواهند داشت و چه عملی انجام شده است. اگر همه چیز درست بود، کار شما تمام است. Logrotate پیشفرض روزانه اجرا میشود و پیکربندی جدید نیز اعمال خواهد شد.
روش دوم: پیکربندی مستقل خارج از ساختار پیشفرض
مثال دیگر: برنامهای دارید که به عنوان کاربر sammy اجرا میشود و فایلهای لاگ آن در /home/sammy/logs/ ذخیره میشود. میخواهید این لاگها را به صورت ساعتی بچرخانید. پس باید پیکربندی را خارج از /etc/logrotate.d/ انجام دهید.
ابتدا فایلی در دایرکتوری خانگی بسازید:
nano /home/sammy/logrotate.confمحتوای زیر را در آن قرار دهید:
/home/sammy/logs/*.log {
hourly
missingok
rotate 24
compress
delaycompress
notifempty
create 640 sammy sammy
sharedscripts
}این پیکربندی هر ساعت لاگها را چرخش میدهد، ۲۴ نسخه قدیمی نگه میدارد، فشرده میکند و بعد از چرخش، فایل جدیدی با مالکیت و دسترسی مناسب میسازد.
برای تست عملکرد، در پوشه خانگی با دستورات زیر دایرکتوری و یک فایل خالی لاگ بسازید:
cd ~
mkdir logs
touch logs/test.logبرای اجرای Logrotate با این پیکربندی و تعیین فایل وضعیت (state file) که در پویش بعدی Logrotate را راهنمایی میکند، دستور زیر را اجرا کنید:
logrotate --state /home/sammy/logrotate.status --verbose /home/sammy/logrotate.confتوضیح پرچمها:
--state: مسیر فایل وضعیت--verbose: نمایش جزئیات اجرا
در بار اول اجرا، هیچ چرخشی انجام نمیشود چون لاگها هنوز خیلی تازه هستند.
فایل وضعیت را میتوانید با:
cat /home/sammy/logrotate.statusمشاهده کنید. این فایل اطلاعاتی از زمان بررسی و چرخش لاگها دارد.
اگر بخواهید Logrotate را مجبور به چرخش حتی اگر شرایط ساعتی رعایت نشده باشد کنید، از گزینه --force استفاده کنید:
logrotate --force --state /home/sammy/logrotate.status /home/sammy/logrotate.confراهاندازی کرون برای اجرای Logrotate ساعتی
برای اجرای خودکار Logrotate هر ساعت، کرون (cron) را تنظیم کنید. با دستور زیر crontab کاربر را ویرایش کنید:
crontab -eدر فایل باز شده، خط زیر را به انتها اضافه کنید:
14 * * * * /usr/sbin/logrotate --state /home/sammy/logrotate.status /home/sammy/logrotate.confاین کار دستور Logrotate را در دقیقه ۱۴ هر ساعت اجرا میکند.
فایل را ذخیره کرده و خارج شوید. این کار کرونجاب را نصب میکند.
بعد از یک ساعت، در مسیر لاگها نسخههای چرخش شده و فشرده شده (مانند access.log.1.gz) ظاهر میشود.
جمعبندی
در این آموزش، نسخه Logrotate را بررسی کردیم، ساختار پیشفرض پیکربندی اوبونتو را شناختیم و دو نوع روش پیکربندی برای لاگهای سفارشی را فعال کردیم.
برای کسب اطلاعات بیشتر درباره گزینههای دستوری و پیکربندی Logrotate، میتوانید دستور زیر را در ترمینال اجرا کنید یا مستندات آنلاین را ببینید:
man logrotateاز همراهی شما با پارمین کلود متشکریم.



نظرات کاربران