| LOGROTATE.CONF(5) | فایلهای پیکربندی | LOGROTATE.CONF(5) |
نام (NAME)
logrotate.conf - فایل پیکربندی ابزار مدیریت و چرخش لاگهای سیستم
توضیحات (DESCRIPTION)
فایل logrotate.conf شامل دستورالعملها و قواعدی است که نحوه بایگانی، فشردهسازی و پاکسازی خودکار فایلهای لاگ در سیستم لینوکس را تعیین میکند.
ابزار logrotate تمام اطلاعات مربوط به فایلهای لاگی را که باید مدیریت کند، از مجموعهای از فایلهای پیکربندی مشخصشده در خط فرمان میخواند. هر فایل پیکربندی میتواند گزینههای سراسری را تنظیم کند (تعاریف محلی بر تعاریف سراسری برتری دارند، و تعاریف بعدی بر تعاریف قبلی اولویت دارند) و فایلهای لاگ را برای چرخش مشخص نماید. گزینههای سراسری روی دستورالعملهای include قبلی تأثیری ندارند. یک نمونه فایل پیکربندی ساده به شکل زیر است:
# نمونه فایل پیکربندی logrotate
compress
/var/log/messages {
rotate 5
weekly
postrotate
/usr/bin/killall -HUP syslogd
endscript
}
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail recipient@example.org
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
/var/log/news/* {
monthly
rotate 2
olddir /var/log/news/old
missingok
sharedscripts
postrotate
kill -HUP $(cat /var/run/inn.pid)
endscript
nocompress
}
~/log/*.log {}
چند خط ابتدایی گزینههای سراسری را تعیین میکنند؛ در این مثال، فایلهای لاگ پس از چرخش فشرده میشوند. توجه داشته باشید که توضیحات (کامنتها) میتوانند در هر کجای فایل پیکربندی قرار گیرند، به شرطی که نخستین نویسه غیر از فاصله خالی در آن خط یک # باشد.
مقادیر به وسیله فاصله خالی یا علامت مساوی اختیاری (=) از دایرکتیوها جدا میشوند. اعداد باید در قالبی مشخص شوند که برای تابع strtoul(3) قابل فهم باشد.
بخش بعدی نحوه مدیریت فایل لاگ /var/log/messages را مشخص میکند. این لاگ قبل از حذف شدن، ۵ چرخش هفتگی را پشت سر خواهد گذاشت. پس از چرخش فایل لاگ (اما قبل از فشردهسازی نسخه قدیمی لاگ)، دستور /usr/bin/killall -HUP syslogd اجرا خواهد شد.
بخش بعدی پارامترهای مربوط به هر دو فایل /var/log/httpd/access.log و /var/log/httpd/error.log را تعیین میکند. هر زمان که اندازه فایلها از ۱۰۰ کیلوبایت بیشتر شود، چرخیده میشوند و نسخههای قدیمی پس از ۵ چرخش به جای حذف شدن، به نشانی recipient@example.org ایمیل میشوند (بدون فشردهسازی). گزینه sharedscripts مشخص میکند که اسکریپت postrotate تنها یکبار برای این بخش اجرا میشود، نه برای هر فایلی که چرخانده شده است.
نامهای فایلهای لاگ میتوانند داخل کوتیشن قرار گیرند (اگر نام حاوی فاصله باشد، استفاده از نقلقول الزامی است). قواعد مرسوم نقلقول شل اعمال میشود و کاراکترهای ´, و \ پشتیبانی میشوند.
بخش بعدی پارامترهای تمام فایلهای موجود در /var/log/news را تعریف میکند. هر فایل به صورت ماهانه چرخانده میشود.
بخش پایانی از بسط تیلدا (tilde expansion) برای چرخش فایلهای لاگ در پوشه خانگی کاربر جاری استفاده میکند. این ویژگی تنها در صورتی فعال است که کتابخانه glob سیستم از بسط تیلدا پشتیبانی کند (مانند GNU glob).
لطفاً در استفاده از نویسههای عمومی (کاراکترهای عام یا wildcards) احتیاط کنید. اگر از * استفاده کنید، logrotate تمام فایلها، از جمله فایلهایی که پیشتر چرخانده شدهاند را میچرخاند. برای رفع این مسئله میتوانید از گزینه olddir یا الگوی دقیقتری (مانند *.log) استفاده نمایید.
توجه داشته باشید که به طور پیشفرض هنگام استفاده از systemd(1)، گزینه ProtectSystem=full در فایل logrotate.service تنظیم شده است. این گزینه مانع از اصلاح فایلهای لاگ در مسیرهای /etc و /usr توسط logrotate میشود.
دستورالعملهای فایل پیکربندی (CONFIGURATION FILE DIRECTIVES)
این دایرکتیوها و گزینهها میتوانند در فایل پیکربندی logrotate مورد استفاده قرار گیرند:
چرخش لاگها (Rotation)
- rotate count
- فایلهای لاگ پیش از حذف یا ارسال به آدرس مشخصشده در دایرکتیو mail، به تعداد count بار چرخانده میشوند. اگر مقدار count برابر 0 باشد، نسخههای قدیمی به جای چرخش بیدرنگ حذف میشوند. اگر برابر -1 باشد، فایلهای قدیمی هرگز حذف نمیشوند، مگر اینکه تحت تأثیر maxage قرار گیرند (با احتیاط استفاده شود، زیرا ممکن است فضای دیسک و کارایی سیستم را هدر دهد). مقدار پیشفرض 0 است.
- olddir directory
- فایلهای لاگ در هنگام چرخش به دایرکتوری directory منتقل میشوند. این directory باید روی همان دستگاه فیزیکی فایلهای لاگ باشد، مگر اینکه از گزینههای copy، copytruncate یا renamecopy استفاده شود. مسیر پوشه به صورت نسبی نسبت به پوشه حاوی فایل لاگ در نظر گرفته میشود مگر اینکه مسیر مطلق مشخص شود. با استفاده از این گزینه، تمام نسخههای قدیمی لاگ در این دایرکتوری قرار میگیرند. این گزینه را میتوان با noolddir باطل کرد.
- noolddir
- فایلهای لاگ در همان دایرکتوری اصلی خود چرخانده میشوند (این گزینه تنظیم olddir را لغو میکند).
- su user group
- چرخش فایلهای لاگ را با این کاربر و گروه به جای کاربر/گروه پیشفرض (معمولاً root) انجام میدهد. مقدار user کاربر و group گروه مورد نظر را مشخص میکند. اگر کاربر/گروه مشخصشده دسترسی کافی برای ایجاد فایلها با مالکیت تعیینشده در گزینه create نداشته باشد، خطا رخ خواهد داد. اگر logrotate با دسترسی ریشه (root) اجرا میشود، توصیه میشود از دایرکتیو su برای چرخش فایلها در دایرکتوریهایی استفاده شود که به طور مستقیم یا غیرمستقیم تحت کنترل کاربران غیرممتاز است.
بسامد و زمانبندی (Frequency)
- hourly
- فایلهای لاگ هر ساعت یکبار چرخانده میشوند. توجه داشته باشید که معمولاً logrotate به صورت روزانه از طریق cron (یا logrotate.timer در systemd(1)) اجرا میشود. برای اعمال واقعی چرخش ساعتی باید پیکربندی زمانبندی را تغییر داده و logrotate را ساعتی اجرا کنید.
- daily
- فایلهای لاگ به صورت روزانه چرخانده میشوند.
- weekly [weekday]
- فایلهای لاگ هفتهای یکبار در روز مشخصشده از هفته (weekday)، یا در صورتی که حداقل ۷ روز از آخرین چرخش گذشته باشد، چرخانده میشوند. مقادیر روز هفته عبارتند از: 0 برای یکشنبه، 1 برای دوشنبه، ...، 6 برای شنبه؛ و مقدار ویژه 7 به معنای دقیقاً هر ۷ روز یکبار فارغ از روز هفته است. در صورت عدم ذکر، مقدار پیشفرض 0 است.
- monthly
- فایلهای لاگ در نخستین اجرای logrotate در هر ماه چرخانده میشوند (معمولاً در روز اول ماه).
- yearly
- فایلهای لاگ در صورتی که سال جاری با سال آخرین چرخش متفاوت باشد، چرخانده میشوند.
- size size
- فایلهای لاگ تنها در صورتی چرخانده میشوند که اندازه آنها بزرگتر از size بایت شود. اگر در انتهای size از نویسه k استفاده شود، اندازه بر حسب کیلوبایت محاسبه میشود؛ در صورت استفاده از M بر حسب مگابایت و در صورت استفاده از G بر حسب گیگابایت محاسبه خواهد شد. بنابراین مقادیر size 100، size 100k، size 100M و size 100G همگی معتبر هستند. این گزینه با گزینههای بازه زمانی ناسازگار (مانعةالجمع) است و در صورت ذکر پس از معیارهای زمانی، بدون در نظر گرفتن زمان آخرین چرخش عمل میکند (آخرین گزینه ذکرشده اولویت دارد).
انتخاب و فیلتر فایلهای لاگ (File selection)
- missingok
- اگر فایل لاگ وجود نداشته باشد، بدون نمایش پیام خطا به سراغ فایل بعدی برود. همچنین ببینید nomissingok.
- nomissingok
- اگر فایل لاگ وجود نداشته باشد، پیام خطا صادر کند (این حالت پیشفرض است).
- ignoreduplicates
- هرگونه تطابق بعدی برای یک فایل لاگ را نادیده بگیرد.
- ifempty
- فایل لاگ حتی اگر خالی باشد چرخانده شود؛ این گزینه تنظیم notifempty را باطل میکند (حالت پیشفرض).
- notifempty
- اگر فایل لاگ خالی باشد، آن را نچرخاند (این گزینه تنظیم ifempty را لغو میکند).
- minage count
- فایلهایی که عمر آنها کمتر از count روز است چرخانده نشوند.
- maxage count
- لاگهای چرخاندهشده با عمر بیش از count روز حذف شوند. بررسی سن تنها در صورتی انجام میشود که فایل لاگ قرار باشد چرخانده شود. تنظیم rotate -1 مانع از این حذف نمیشود. در صورت تنظیم mail و maillast، فایلها به نشانی مشخصشده ایمیل میشوند.
- minsize size
- فایلهای لاگ زمانی که حجم آنها بیشتر از size بایت شود چرخانده میشوند، اما نه پیش از فرا رسیدن بازه زمانی تعیینشده (daily، weekly، monthly یا yearly). این گزینه هر دو عامل حجم و برچسب زمانی فایل را مد نظر قرار میدهد.
- maxsize size
- فایلهای لاگ زمانی که حجم آنها بیشتر از size بایت شود، حتی پیش از فرا رسیدن بازه زمانی تعیینشده چرخانده میشوند. این گزینه نیز هر دو عامل حجم و برچسب زمانی فایل را مد نظر قرار میدهد.
- tabooext [+] list
- فهرست پسوندهای ممنوعه را تغییر میدهد (برای اطلاعات بیشتر به دایرکتیو include مراجعه کنید). اگر علامت + قبل از فهرست بیاید، به فهرست فعلی افزوده میشود؛ در غیر این صورت جایگزین آن خواهد شد. به طور پیشفرض پسوندهایی نظیر .bak، .disabled، .dpkg-old، .rpmnew، .rpmsave، .swp و ~ در فهرست ممنوعه قرار دارند.
- taboopat [+] list
- فهرست الگوهای ممنوعه (glob) را تغییر میدهد. اگر علامت + قبل از فهرست بیاید، به الگوهای موجود افزوده میشود؛ در غیر این صورت جایگزین میشود. در ابتدا این فهرست خالی است.
فایلها و پوشهها (Files and Folders)
- create mode owner group, create owner group
- بلافاصله پس از چرخش (قبل از اجرای اسکریپت postrotate)، فایل لاگ جدیدی با همان نام لاگ چرخیدهشده ایجاد میشود. مقدار mode مجوز دسترسی را به صورت هشتهشتی (همانند chmod(2))، مقدار owner مالک فایل و group گروه فایل لاگ را مشخص میکند. هر یک از این ویژگیها را میتوان نادیده گرفت که در این صورت از ویژگیهای فایل لاگ اصلی استفاده خواهد شد. این گزینه را میتوان با nocreate غیرفعال کرد.
- nocreate
- فایل لاگ جدیدی ایجاد نشود (تنظیم create را لغو میکند).
- createolddir mode [owner [group]], createolddir [owner [group]]
- اگر پوشه مشخصشده در دایرکتیو olddir وجود نداشته باشد، آن را ایجاد کند. مقدار پیشفرض مجوز در صورت عدم ذکر 0755 است. این رفتار با nocreateolddir لغو میشود.
- nocreateolddir
- در صورت عدم وجود، پوشه olddir توسط logrotate ایجاد نشود.
- copy
- یک رونوشت از فایل لاگ ایجاد کند، اما فایل اصلی دستنخورده باقی بماند. این گزینه برای پشتیبانگیری موقت یا زمانی که برنامهای دیگر باید فایل را پردازش کند مفید است. هنگام استفاده از این گزینه، create تأثیری ندارد.
- nocopy
- فایل لاگ اصلی کپی نشود (تنظیم copy را لغو میکند).
- copytruncate
- پس از ایجاد یک نسخه رونوشت (کپی)، فایل لاگ اصلی را بدون جابهجا کردن آن در همان جا به اندازه صفر کوتاه و خالی (truncate) کند. این گزینه برای برنامههایی مناسب است که نمیتوان آنها را متوقف کرد یا سیگنال بستن فایل لاگ را دریافت نمیکنند و همچنان به نوشتن در انتهای فایل ادامه میدهند. توجه داشته باشید که بین کپی کردن و خالی کردن فایل یک فاصله زمانی بسیار کوتاه وجود دارد که ممکن است بخشی از دادههای لاگ در این فاصله از دست برود. هنگام استفاده از این گزینه، دایرکتیو create بیاثر خواهد بود.
- nocopytruncate
- فایل لاگ اصلی پس از رونوشتبرداری در جای خود کوتاه و خالی نشود (تنظیم copytruncate را لغو میکند).
- renamecopy
- فایل لاگ ابتدا با افزودن پسوند ".tmp" در همان پوشه تغییر نام مییابد. سپس اسکریپت postrotate اجرا شده و فایل لاگ از نام موقت به نام نهایی کپی میشود و در پایان فایل موقت حذف میگردد.
- norenamecopy
- فایل لاگ اصلی تغییر نام نیافته و کپی نشود (تنظیم renamecopy را لغو میکند).
- shred
- حذف فایلهای لاگ را با استفاده از دستور shred -u به جای تابع unlink() انجام دهد تا اطمینان حاصل شود که محتوای لاگها پس از حذف قابل بازیابی نیست. به طور پیشفرض غیرفعال است.
- noshred
- از دستور shred هنگام پاکسازی فایلهای لاگ قدیمی استفاده نکند.
- shredcycles count
- تعداد دفعات بازنویسی روی فایل را با دستور shred(1) پیش از حذف نهایی مشخص میکند.
- allowhardlink
- فایلهایی را که چندین پیوند سخت (hard link) دارند نیز بچرخاند. به طور پیشفرض غیرفعال است و به دلیل امکان خالی شدن فایل پیوندخورده باید با احتیاط استفاده شود.
- noallowhardlink
- فایلهای دارای چندین پیوند سخت را نچرخاند (حالت پیشفرض).
فشردهسازی (Compression)
- compress
- نسخههای قدیمی فایلهای لاگ به طور پیشفرض با gzip(1) فشردهسازی میشوند. همچنین ببینید nocompress.
- nocompress
- نسخههای قدیمی فایلهای لاگ فشرده نشوند (حالت پیشفرض در نبود دایرکتیو compress).
- compresscmd
- دستور مورد استفاده برای فشردهسازی را مشخص میکند. مقدار پیشفرض gzip(1) است.
- uncompresscmd
- دستور مورد استفاده برای استخراج و خارج کردن از فشردگی را مشخص میکند. مقدار پیشفرض gunzip(1) است.
- compressext
- پسوند فایلهای فشردهشده را مشخص میکند. مقدار پیشفرض متناسب با دستور فشردهسازی تنظیم میشود (برای نمونه .gz).
- compressoptions
- گزینههای خط فرمان را به برنامه فشردهساز پاس میدهد. برای gzip(1) مقدار پیشفرض "-6" است (اولویت فشردگی بالاتر در ازای سرعت).
- delaycompress
- فشردهسازی فایل لاگ قبلی را به چرخه چرخش بعدی به تعویق میاندازد. این گزینه فقط در ترکیب با compress کاربرد دارد و در مواردی سودمند است که برنامه هنوز در حال نوشتن روی فایل لاگ قدیمی است و نمیتوان آن را بیدرنگ بست.
- nodelaycompress
- فشردهسازی لاگ را به تعویق نیندازد (تنظیم delaycompress را لغو میکند).
نامگذاری فایلها (Filenames)
- extension ext
- فایلهای لاگی که دارای پسوند ext هستند، میتوانند این پسوند را پس از چرخش نیز حفظ کنند. در صورت فعال بودن فشردهسازی، پسوند فشردهساز پس از آن قرار میگیرد (مانند mylog.1.foo.gz به جای mylog.foo.1.gz).
- addextension ext
- پسوند نهایی ext را پس از چرخش به فایل اضافه میکند.
- start count
- شماره پایه برای شمارهگذاری فایلهای لاگ چرخیدهشده را تعیین میکند. برای نمونه، اگر 0 مشخص شود، لاگها با پسوند .0 شروع میشوند. مقدار پیشفرض معمولاً 1 است.
- dateext
- نسخههای بایگانیشده را به جای یک شماره ساده، با افزودن تاریخ به صورت YYYYMMDD نامگذاری میکند. قالب تاریخ از طریق گزینههای dateformat و dateyesterday قابل تنظیم است.
- nodateext
- از برچسب تاریخ در نام لاگهای چرخیدهشده استفاده نکند (تنظیم dateext را لغو میکند).
- dateformat format_string
- قالب پسوند تاریخ را با ساختاری شبیه به تابع strftime(3) تعیین میکند. تنها مشخصههای %Y %m %d %H %M %S %V %s و %z مجاز هستند. مقدار پیشفرض -%Y%m%d است (برای حالت ساعتی -%Y%m%d%H).
- dateyesterday
- از تاریخ دیروز به جای امروز برای ایجاد پسوند dateext استفاده کند تا تاریخ روی فایل با زمان رخدادهای داخل آن همخوانی داشته باشد.
- datehourago
- از زمان یک ساعت قبل به جای زمان جاری استفاده کند که در چرخش hourly بسیار سودمند است.
ارسال ایمیل (Mail)
- mail address
- هنگامی که فایل لاگ از چرخه نگهداری خارج و منقضی میشود، به آدرس address ایمیل شود. در صورتی که نباید هیچ ایمیلی ارسال گردد، از دایرکتیو nomail استفاده کنید.
- nomail
- فایلهای لاگ قدیمی به هیچ نشانی ایمیل نشوند.
- mailfirst
- هنگام استفاده از دستور mail، فایلی که به تازگی چرخانده شده ارسال شود، نه فایلی که در آستانه انقضا و حذف است.
- maillast
- هنگام استفاده از دستور mail، فایلی که در آستانه حذف است ایمیل شود (حالت پیشفرض).
درج فایلهای پیکربندی بیشتر (Additional config files)
- include file_or_directory
- محتوای فایل ارائهشده را دقیقاً در همان نقطه میخواند و اعمال میکند. اگر یک دایرکتوری داده شود، اغلب فایلهای درون آن دایرکتوری به ترتیب الفبایی پردازش میشوند. فایلهایی که نامنظم باشند یا نام آنها با پسوندهای ممنوعه خاتمه یابد، نادیده گرفته میشوند. مسیر میتواند با ~/ آغاز شود تا نسبت به پوشه خانگی کاربر اجراکننده سنجیده شود. به دلایل امنیتی، فایلهای پیکربندی نباید توسط گروه یا دیگران قابل نوشتن (group-writable یا world-writable) باشند.
اسکریپتها و دستورات جانبی (Scripts)
- به طور معمول، اسکریپتهای prerotate و postrotate برای هر لاگی که چرخانده میشود اجرا میگردند. اگر sharedscripts مشخص شود، این اسکریپتها صرفنظر از تعداد فایلهای منطبق با الگو، تنها یکبار اجرا خواهند شد. اگر هیچ لاگی نیازمند چرخش نباشد، اسکریپت اجرا نخواهد شد.
- اسکریپتهای prerotate و postrotate را برای تکتک فایلهای لاگ چرخیدهشده اجرا کند (حالت پیشفرض).
- firstaction
-
script
endscript اسکریپت script یکبار قبل از شروع چرخش تمامی فایلهای منطبق با الگو و قبل از اجرای prerotate اجرا میشود، به شرطی که حداقل یک لاگ بچرخد. - lastaction
-
script
endscript اسکریپت script یکبار پس از اتمام چرخش تمامی فایلهای منطبق و پس از postrotate اجرا میشود، به شرطی که حداقل یک لاگ چرخیده باشد. - prerotate
-
script
endscript اسکریپت قبل از چرخش فایل لاگ اجرا میشود. مسیر مطلق فایل لاگ به عنوان آرگومان اول به اسکریپت فرستاده میشود. - postrotate
-
script
endscript اسکریپت پس از چرخش لاگ و قبل از فشردهسازی آن اجرا میگردد. در حالت عادی، مسیر مطلق لاگ به عنوان آرگومان اول و مسیر فایل چرخیدهشده به عنوان آرگومان دوم پاس داده میشوند. - preremove
-
script
endscript اسکریپت دقیقاً پیش از حذف یک فایل لاگ اجرا میشود و نام فایلی که در آستانه حذف است به آن پاس داده میشود.
بخش اسکریپتها (SCRIPTS)
خطوط میان کلمه کلیدی آغازین (مانند prerotate) و endscript (که هر دو باید به تنهایی در یک خط قرار گیرند) با استفاده از مفسر /bin/sh اجرا میشوند. این اسکریپت برخی ویژگیها مانند خروجی خطا (stderr)، خروجی استاندارد (stdout)، محیط و umask را از فرایند logrotate به ارث میبرد. اسکریپتها با دسترسی کاربر و گروه اجراکننده اجرا میشوند و از دایرکتیو su تأثیر نمیپذیرند.
کاربر و گروه (USER AND GROUP)
شناسههای کاربر و گروه ابتدا با ارزیابی نام متنی آنها و در صورت شکست، از طریق مقدار عددی (UID/GID) پردازش و تطبیق داده میشوند.
فایلها (FILES)
- /var/lib/logrotate/status
- فایل وضعیت پیشفرض برای نگهداری زمان آخرین چرخش لاگها.
- /etc/logrotate.conf
- فایل اصلی پیکربندی و گزینههای سراسری.
- /etc/logrotate.d/
- دایرکتوری معمول برای قرار دادن فایلهای پیکربندی بستهها و سرویسهای مجزا.
همچنین ببینید (SEE ALSO)
chmod(2), gunzip(1), gzip(1), mail(1), shred(1), strftime(3), strtoul(3), https://github.com/logrotate/logrotate
نویسندگان (AUTHORS)
Erik Troan, Preston Brown, Jan Kaluza. <https://github.com/logrotate/logrotate>
| مه ۲۰۲۵ | logrotate |