EXPIRE.CTL(5) InterNetNews Documentation EXPIRE.CTL(5)

expire.ctl - پیکربندی انقضای مقالات در INN

پرونده pathetc/expire.ctl پرونده پیکربندی پیش‌فرض برای expire و expireover است که آن را هنگام راه‌اندازی می‌خوانند. این پرونده دو هدف را برآورده می‌کند: مشخص می‌کند رکوردهای تاریخچه برای مقالات منقضی‌شده یا ردشده چه مدت به خاطر سپرده شوند، و تعیین می‌کند مقالات ذخیره‌شده روی سرور تا چه مدت نگهداری شوند.

به طور معمول، اگر تمام روش‌های ذخیره‌سازی مورد استفاده سرور از نوع خودانقضا (مانند CNFS) باشند، تمام خطوط به جز تنظیم "/remember/" (که در ادامه شرح داده شده است) نادیده گرفته می‌شوند. این رفتار را می‌توان با گزینه -N در expire یا expireover تغییر داد.

خطوط خالی و خطوطی که با علامت هش ("#") آغاز می‌شوند نادیده گرفته می‌شوند. تمام خطوط دیگر باید در یکی از دو قالب مشخص باشند. ترتیب خطوط در پرونده اهمیت دارد و آخرین مدخل منطبق استفاده خواهد شد.

قالب نخست مشخص می‌کند که رکوردهای تاریخچه برای مقالاتی که در مخزن خبر (news spool) حضور ندارند، چه مدت نگهداری شوند. این‌ها مقالاتی هستند که یا قبلاً منقضی شده‌اند، یا مقالاتی که سرور آن‌ها را رد کرده است (هنگامی که remembertrash در inn.conf روی true تنظیم شده باشد). باید تنها و تنها یک خط در این قالب وجود داشته باشد که به شکل زیر است:

/remember/:<days>

که در آن <days> یک عدد اعشاری است که حداقل تعداد روزهایی را مشخص می‌کند که یک رکورد تاریخچه برای یک Message-ID معین (از زمان ارسال اولیه آن) نگهداری می‌شود، صرف‌نظر از این‌که مقاله در spool موجود باشد یا خیر. (رکوردهای تاریخچه برای مقالاتی که هنوز در spool حضور دارند همیشه نگهداری می‌شوند.) تنظیم آن روی "never" به این معنی است که رکوردهای تاریخچه برای همیشه نگهداری خواهند شد، و "0" به این معنی است که رکوردهای تاریخچه برای مقالاتی که در spool حضور ندارند هنگام اجرای برنامه‌های انقضا پاکسازی خواهند شد. (این ویژگی به ویژه در مواردی مفید است که نیاز به تزریق مجدد مقالاتی دارید که دیگر در news spool شما حضور ندارند اما به دلیل حضور در تاریخچه به عنوان تکراری شناخته می‌شوند: باید "/remember/" را روی "0" تنظیم کنید، فرایند expire را مثلاً از طریق news.daily که با همان پارامترهای crontab به همراه "notdaily" فراخوانی شده است اجرا کنید، و سپس تغییر را در expire.ctl بازگردانید. تمام مقالاتی که قبلاً رد یا حذف شده بودند در صورت ارائه Message-ID آن‌ها، دیگر به عنوان تکراری در نظر گرفته نخواهند شد.)

دلیل اصلی نگهداری رکوردی از مقالات قدیمی این است که اگر یک سرور همتا مقالات قدیمی‌ای را ارائه دهد که قبلاً پذیرفته شده بودند اما منقضی شده‌اند، سرور بدون رکورد تاریخچه برای چنین مقالاتی، دوباره آن‌ها را بپذیرد و خوانندگان مقالات تکراری را ببینند. مقالات قدیمی‌تر از تعداد روزهای مشخص به هیچ وجه توسط سرور پذیرفته نخواهند شد (به artcutoff در inn.conf(5) و فلگ -c در innd(8) مراجعه کنید)، و این تنظیم احتمالاً باید با آن بازه زمانی مطابقت داشته باشد تا اطمینان حاصل شود که سرور هرگز موارد تکراری را نمی‌پذیرد. از آنجا که مقدار پیش‌فرض artcutoff برابر "10" روز است، به این معنی است که "/remember/" باید روی "11" روز تنظیم شود تا مقالاتی که تاریخ ارسال آن‌ها یک روز در آینده است نیز لحاظ شوند.

بیشتر خطوط این پرونده در قالب دوم خواهند بود که از چهار یا پنج فیلد جداشده با دو نقطه (colon) تشکیل می‌شود:

<pattern>:<flag>:<min>:<default>:<max>

اگر groupbaseexpiry در inn.conf روی true باشد (حالت پیش‌فرض)، و در غیر این صورت:

<classnum>:<min>:<default>:<max>

تمام خطوط با توجه به تنظیم فعلی groupbaseexpiry باید در قالب صحیح باشند، و بنابراین این دو قالب نمی‌توانند هم‌زمان در یک پرونده وجود داشته باشند.

به طور معمول، یک قاعده از طریق ترکیب فیلدهای <pattern> و <flag> با یک گروه خبری مطابقت می‌یابد. <pattern> یک الگوی سبک uwildmat است که گروه‌های خبری اعمال‌شده برای این خط را مشخص می‌کند. توجه داشته باشید که آخرین مدخل منطبق استفاده خواهد شد، بنابراین الگوهای عمومی (مانند پیش‌فرض‌ها برای همه گروه‌ها که در آن‌ها <pattern> برابر "*" است) باید در ابتدای پرونده پیش از تنظیمات خاص‌تر قرار گیرند.

فیلد <flag> می‌تواند برای محدود کردن بیشتر گروه‌های خبری اعمال‌شده برای خط استفاده شود و باید از مجموعه زیر انتخاب شود:

M   Only moderated groups
U   Only unmoderated groups
A   All groups
X   Remove the article from all groups it appears in

یکی از موارد "M"، "U" یا "A" باید مشخص شود. "X" باید در ترکیب با یکی از حروف دیگر استفاده شود، نه به تنهایی.

سیاست انقضا برای هر مقاله‌ای در یک گروه خبری که با آن مطابقت دارد اعمال می‌شود. هیچ راهی برای تنظیم سیاست انقضای متفاوت برای مقالاتی که به گروه‌هایی ارسال متقابل (crosspost) شده‌اند که شما آن‌ها را دریافت نمی‌کنید نسبت به مقالات دیگر در همان گروه وجود ندارد. به طور معمول، مقالات تا زمانی که از هر گروهی که به آن ارسال شده‌اند منقضی نشوند به طور کامل حذف نخواهند شد، اما اگر مقاله‌ای بر اساس قاعده‌ای منقضی شود که در آن <flag> حاوی "X" باشد، بلافاصله از تمام گروه‌های خبری که به آن‌ها ارسال شده بود حذف می‌شود. (اگر این رفتار برای تمام قواعد مورد نظر باشد، می‌توانید فلگ -e را به expireoverview بدهید.)

اگر به جای آن groupbaseexpiry روی false تنظیم شده باشد، فیلدهای <pattern> و <flag> وجود نخواهند داشت و موارد فوق اعمال نمی‌شوند. در عوض، یک فیلد تک <classnum> وجود دارد که یا عددی مطابق با شماره کلاس ذخیره‌سازی مشخص‌شده در storage.conf است، یا "*" برای مشخص کردن پیش‌فرض برای همه کلاس‌های ذخیره‌سازی. تمام مقالات ذخیره‌شده در یک کلاس ذخیره‌سازی بر اساس دستورالعمل‌های خط دارای <classnum> منطبق منقضی خواهند شد، و هنگامی که مقالات منقضی شوند، همیشه از تمام گروه‌هایی که به آن‌ها ارسال شده بودند حذف می‌شوند.

سه فیلد باقی‌مانده در هر دو قالب یکسان هستند و برای تعیین این‌که یک مقاله چه مدت از زمان ورود اولیه آن باید نگهداری شود به کار می‌روند (مگر اینکه فلگ -p به expire(8) یا expireover(8) داده شده باشد، که در این صورت از زمان ارسال اولیه آن استفاده می‌شود). هر فیلد باید یک عدد اعشاری از روزها باشد (کسرها مانند "8.5" مجاز هستند، اما به یاد داشته باشید که مقالات تنها زمانی حذف می‌شوند که expire یا expireover اجرا شود، که معمولاً روزی یک بار توسط news.daily است) یا کلمه "never".

فیلد میانی، <default>، به عنوان دوره انقضا برای بیشتر مقالات استفاده خواهد شد. دو فیلد دیگر، <min> و <max>، تنها زمانی به کار می‌آیند که مقاله تاریخ انقضای خاصی را با فیلد سرآیند Expires درخواست کند. مقالات دارای فیلد سرآیند Expires در تاریخی که در آن سرآیند مشخص شده است منقضی می‌شوند، مشروط بر این محدودیت‌ها که حداقل <min> روز و حداکثر <max> روز نگهداری شوند.

اگر <min> روی "never" تنظیم شود، هیچ مقاله‌ای منطبق با آن خط هرگز منقضی نخواهد شد. اگر <default> روی "never" تنظیم شود، هیچ مقاله‌ای منطبق با آن خط بدون فیلد سرآیند صریح Expires هرگز منقضی نخواهد شد. اگر <max> روی "never" تنظیم شود، فیلدهای سرآیند Expires بدون در نظر گرفتن این‌که چقدر در آینده باشند پذیرفته خواهند شد.

باید این فیلدها را به عنوان حد پایین، پیش‌فرض، و حد بالا در نظر گرفت. از آنجا که بیشتر مقالات فیلد سرآیند Expires ندارند، فیلد دوم مهم‌ترین و پرکاربردترین فیلد اعمال‌شده است.

مقالاتی که با هیچ قاعده انقضایی مطابقت نداشته باشند منقضی نخواهند شد، اما این یک خطا محسوب می‌شود و منجر به هشدار خواهد شد. همیشه باید یک خط پیش‌فرض وجود داشته باشد (خطی با <pattern> برابر با "*" و <flag> برابر با "A"، یا خطی با <classnum> برابر با "*")، که در صورت تمایل می‌تواند صریحاً بیان کند مقالات به طور پیش‌فرض هرگز نباید منقضی شوند. خط پیش‌فرض عموماً باید اولین خط پرونده باشد (به جز "/remember/") تا سایر قواعد انقضا بتوانند آن را بازنویسی (override) کنند.

اغلب در نظر گرفتن فیلد سرآیند Expires در مقالات، به ویژه مقالات موجود در گروه‌های مدیریت‌شده، مفید است. برای این کار، <min> را روی صفر، <default> را روی هر انقضای عادی مورد نظر، و <max> را روی "never" یا عددی بزرگ مانند "365" روز برای حداکثر عمر یک‌ساله مقاله تنظیم کنید.

برای نادیده گرفتن فیلد سرآیند Expires، هر سه فیلد را روی مقداری یکسان تنظیم کنید.

هنگامی که groupbaseexpiry روی true باشد (پیش‌فرض):

# Keep expired article history for 11 days, matching artcutoff
# plus one.
/remember/:11
# Most articles stay for two weeks, ignoring Expires header fields.
*:A:14:14:14
# Accept Expires header fields in moderated newsgroups for up to
# a year, and retain moderated newsgroups for a bit longer.
*:M:1:30:365
# Keep local newsgroups for a long time and local project
# newsgroups forever.
example.*:A:1:90:90
example.project.*:A:never:never:never

هنگامی که groupbaseexpiry روی false باشد، برای انقضا بر پایه کلاس:

# Keep expired article history for 11 days, matching artcutoff
# plus one.
/remember/:11
# Set a default expiration of seven days and honour Expires header
# fields within reasonable limits.
*:1:7:35
# Class 0 is retained for two weeks and honor Expires header fields
# within reasonable limits.
0:1:14:65

توسط Rich $alz <rsalz@uunet.uu.net> برای InterNetNews نوشته شده است. تبدیل به POD توسط Russ Allbery <eagle@eyrie.org>.

expire(8), expireover(8), inn.conf(5), innd(8), libinn_uwildmat(3), news.daily(8), storage.conf(5).

2023-03-07 INN 2.7.4