EXPIRE(8) InterNetNews Documentation EXPIRE(8)

expire - منقضی کردن و حذف مقالات قدیمی در INN

expire [-iNnptx] [-d dir] [-f file] [-g file] [-h file] [-r reason] [-s size] [-v level] [-w number] [-z file] [expire.ctl]

دستور expire فایل متنی در قالب history(5) را در مسیر pathdb/history پیمایش کرده و از اطلاعات ثبت‌شده در آن برای پاک‌سازی مقالات قدیمی اخبار استفاده می‌کند. رفتار آن به مقدار تنظیم‌شده برای groupbaseexpiry در inn.conf بستگی دارد.

هنگامی که groupbaseexpiry برابر با false باشد، منقضی کردن مقالات عمدتاً توسط expire و بر اساس قوانین انقضا در expire.ctl انجام می‌شود که با کلاس ذخیره‌سازی (storage class) هر مقاله مطابقت دارد. مقالات و ورودی‌های تاریخچه توسط expire حذف می‌شوند و سپس expireover پاک‌سازی تکمیلی برای حذف ورودی‌های پایگاه‌داده چکیده (overview database) را انجام می‌دهد. ورودی‌های تاریخچه مقالات منقضی‌شده تنها در صورتی حذف می‌شوند که سن آن‌ها بیشتر از تعداد روزهای مشخص‌شده در خط "/remember/" در expire.ctl باشد. مقالاتی که با استفاده از روش‌های ذخیره‌سازی دارای قابلیت انقضای خودکار مانند CNFS ذخیره شده‌اند، به‌طور پیش‌فرض تحت تأثیر رفتار اصلی expire قرار نمی‌گیرند (اما برای غیرفعال کردن این حالت، به گزینه -N مراجعه کنید).

هنگامی که groupbaseexpiry برابر با true باشد، منقضی کردن مقالات عمدتاً توسط expireover و بر اساس قوانین انقضا در expire.ctl که با هر گروه خبری مطابقت دارد انجام می‌شود. مقالات توسط expireover از مخزن مقالات خبری (news spool) حذف می‌شوند و سپس expire پاک‌سازی‌های تکمیلی را برای حذف ورودی‌های قدیمی پایگاه‌داده تاریخچه انجام می‌دهد.

برای مقالات در روش‌های ذخیره‌سازی با انقضای خودکار هنگامی که groupbaseexpiry در inn.conf برابر با false تنظیم شده باشد و گزینه -N داده نشده باشد، یا برای تمام مقالات هنگامی که groupbaseexpiry برابر با true تنظیم شده باشد، expire.ctl به‌جز خط "/remember/" نادیده گرفته می‌شود؛ در این حالت expire تنها بررسی می‌کند که آیا مقاله هنوز وجود دارد یا خیر، و در صورت نیاز، ورودی‌های مربوط به آن در تاریخچه را پاک‌سازی می‌کند.

صرف‌نظر از تنظیم groupbaseexpiry ، برنامه expireover باید همراه با expire اجرا شود، که معمولاً از طریق news.daily توسط cron صورت می‌گیرد.

توجه داشته باشید که expire هرگز مقالاتی را که با هیچ ورودی در expire.ctl تطابق ندارند پاک‌سازی نمی‌کند.

همچنین توجه داشته باشید که اگر groupbaseexpiry برابر با true باشد، کارساز برای منقضی کردن مقالات در بخش‌های ذخیره‌سازی پشتیبان که دارای قابلیت انقضای خودکار نیستند، به یک پایگاه‌داده چکیده نیاز دارد. اگر قصد ندارید پایگاه‌داده چکیده داشته باشید، بهتر است تنها از بخش‌های پشتیبان با انقضای خودکار مانند CNFS استفاده کنید، زیرا ورودی‌های تاریخچه همچنان توسط expire هنگامی که تشخیص دهد مقاله‌ای دیگر در آن بخش وجود ندارد، پاک‌سازی خواهند شد.

اگر گزینه -d استفاده شود، فایل جدید history و پایگاه‌داده در دایرکتوری مشخص‌شده dir ایجاد می‌شود. این گزینه زمانی مفید است که سیستم‌فایل فضای کافی برای نگهداری هم‌زمان فایل‌های تاریخچه قدیم و جدید را نداشته باشد. هنگامی که این گزینه استفاده می‌شود، expire کارساز را در حالت متوقف‌شده (paused) رها می‌کند و یک فایل با حجم صفر و همنام با فایل جدید تاریخچه با پسوند ".done" ایجاد می‌کند تا نشان دهد که فرایند انقضا با موفقیت تکمیل شده است. اسکریپت فراخواننده باید فایل تاریخچه جدید را مستقر کرده و کارساز را از حالت توقف خارج کند. گزینه -r باید همراه با این گزینه استفاده شود.
برای مشخص کردن یک فایل تاریخچه جایگزین، از گزینه -f استفاده کنید. این گزینه هنگام استفاده به همراه گزینه -d معتبر است، و خروجی در فایل مشخص‌شده نوشته خواهد شد. مقدار پیش‌فرض بدون گزینه -f برابر با "history" است.
اگر گزینه -g داده شود، یک خلاصه یک‌خطی معادل خروجی -v 1 ، که زمان جاری در ابتدای آن قرار گرفته است، به انتهای file مشخص‌شده اضافه خواهد شد.
برای مشخص کردن یک فایل متنی ورودی تاریخچه جایگزین، از گزینه -h استفاده کنید. expire از پایگاه‌داده قدیمی dbz برای تعیین اندازه پایگاه‌داده جدید استفاده می‌کند. (اگر گزینه -d استفاده نشود، نام فایل خروجی همانند نام فایل ورودی همراه با پسوند ".n" خواهد بود.)

مقدار پیش‌فرض بدون گزینه -h مسیر pathdb/history است.

برای نادیده گرفتن پایگاه‌داده قدیمی، از گزینه -i استفاده کنید.
فایل کنترلی به‌طور معمول برای مقالاتی که در روش‌های ذخیره‌سازی با قابلیت انقضای خودکار قرار دارند، نادیده گرفته می‌شود. اگر از گزینه -N استفاده شود، expire همچنان از فایل کنترلی برای این مقالات استفاده می‌کند.

این پارامتر تنها زمانی کاربرد دارد که groupbaseexpiry در inn.conf برابر با false تنظیم شده باشد.

اگر innd در حال اجرا نیست، از گزینه -n استفاده کنید تا expire دستورات "pause" یا "go" را ارسال نکند. (برای جزئیات بیشتر درباره این دستورات، به ctlinnd(8) مراجعه کنید). توجه داشته باشید که expire تنها برای مدت زمان بسیار کوتاهی نیاز به دسترسی انحصاری دارد -- به اندازه‌ای که بررسی کند آیا مقالات جدیدی از زمان رسیدن اولیه به انتهای فایل دریافت شده‌اند یا خیر، و نام فایل‌های جدید را به نام فایل‌های کاری تغییر دهد.
دستور expire تصمیمات خود را بر اساس زمان دریافت مقاله، همان‌طور که در فایل history ثبت شده است، اتخاذ می‌کند. این بدان معناست که مقالات اغلب کمی بیشتر از سایر برنامه‌های انقضا که تصمیمات خود را بر اساس تاریخ ارسال (posting date) مقاله قرار می‌دهند نگهداری می‌شوند. برای استفاده از تاریخ ارسال مقاله، از گزینه -p استفاده کنید.
دستور expire به‌طور معمول هنگامی که به دسترسی انحصاری به فایل history نیاز دارد، یک دستور "pause" به دیمن محلی innd ارسال کرده و از رشته "Expiring" به‌عنوان دلیل (reason) استفاده می‌کند. برای ارائه دلیلی متفاوت، از گزینه -r استفاده کنید. شناسه فرایند به انتهای دلیل اضافه خواهد شد. هنگامی که کار expire پایان یافت و فایل history جدید آماده شد، یک دستور "go" ارسال می‌کند. همچنین گزینه -n را ببینید.
دستور expire اندازه بهینه فایل history جدید را بر اساس اندازه فایل قبلی تعیین می‌کند. در صورتی که بخواهید اندازه‌ای مشخص را تحمیل کنید، از این گزینه برای بهینه‌سازی پایگاه‌داده تاریخچه جدید برای تقریباً size جفت کلید-مقدار (یعنی خطوط موجود در history) استفاده کنید. مشخص کردن دقیق اندازه، پایگاه‌داده کارآمدتری ایجاد خواهد کرد. (اندازه باید تخمینی از تعداد نهایی مقالات، معمولاً اندازه فایل قدیمی history بر حسب تعداد خطوط باشد.)
اگر گزینه -t استفاده شود، آنگاه expire فهرستی از نشانه‌هایی (tokens) که باید حذف شوند را در خروجی استاندارد خود تولید می‌کند، و فایل history جدید در history.n ، history.n.dir ، history.n.index و history.n.hash باقی خواهد ماند. این گزینه در صورت استفاده به همراه گزینه -n برای اشکال‌زدایی مفید است. توجه داشته باشید که در صورت استفاده از گزینه -f ، نام مشخص‌شده با آن گزینه به‌جای history استفاده خواهد شد.
گزینه -v برای افزایش پرگویی (verbosity) برنامه استفاده می‌شود که پیام‌هایی را در خروجی استاندارد تولید می‌کند. مقدار level باید یک عدد باشد، که اعداد بالاتر منجر به خروجی بیشتری می‌شوند. سطح یک مجموع اقدامات مختلف انجام‌شده را چاپ می‌کند (اگر فایل history جدیدی نوشته نشود معتبر نیست)، سطح دو گزارشی از هر فایل به‌صورت مجزا چاپ می‌کند، در حالی که سطح پنج منجر به چندین خط خروجی به ازای هر خط تاریخچه پردازش‌شده می‌شود.
از گزینه -w برای «تحریف» زمان (warp) استفاده کنید تا expire تصور کند در زمانی غیر از زمان جاری در حال اجرا است. مقدار باید یک عدد ممیز شناور علامت‌دار باشد که تعداد روزها را به‌عنوان انحراف (offset) مشخص می‌کند.
اگر گزینه -x استفاده شود، آنگاه expire هیچ فایل تاریخچه جدیدی ایجاد نخواهد کرد. این گزینه بیش از همه زمانی مفید است که با گزینه‌های -n و -t ترکیب شود تا مشخص گردد چگونه سیاست‌های انقضای مختلف، میزان فضای دیسک استفاده‌شده را تغییر می‌دهند.
اگر گزینه -z استفاده شود، مقالات حذف نمی‌شوند، بلکه نام آن‌ها به انتهای file مشخص‌شده اضافه می‌شود. به توضیحات delayrm در news.daily(8) مراجعه کنید. اگر نام فایلی مشخص شود، به‌عنوان فایل کنترلی در نظر گرفته شده و بر اساس قوانین در expire.ctl تجزیه می‌شود. از یک خط تیره منفرد ("-") می‌توان برای خواندن فایل از ورودی استاندارد استفاده کرد. اگر فایلی مشخص نشود، فایل pathetc/expire.ctl خوانده می‌شود.

هنگامی که expiretombstone و groupbaseexpiry در inn.conf فعال باشند، expire گزارش حذفیات در هر چرخه را که توسط expireover ، innd و sm -r تولید می‌شود (فایل‌های گزارش expireover.tombstone و cancels.tombstone در pathdb) مصرف می‌کند تا بتواند ورودی‌های تاریخچه را برای آن مقالات بدون انجام فراخوان سیستمی "SMretrieve(RETR_STAT)" به ازای هر مقاله حذف کند. یک گزارش سنگ قبر (tombstone) خالی به‌منزله «عدم وجود لغو در این چرخه» تلقی شده و از پویش کند به‌طور کامل صرف‌نظر می‌شود. برای چرخه حیات فایل، مدل قفل‌گذاری و شیوه بازیابی، به inn.conf(5) در زیربخش expiretombstone مراجعه کنید.

نوشته‌شده توسط Rich $alz <rsalz@uunet.uu.net> برای InterNetNews. تبدیل به POD توسط Julien Elie.

ctlinnd(8), expire.ctl(5), expireover(8), history(5), inn.conf(5), innd(8), libinn_dbz(3), libinn_inndcomm(3), news.daily(8).

2026-06-12 INN 2.7.4