Наши партнеры








Книги по Linux (с отзывами читателей)

Библиотека сайта rus-linux.net

Устаревшие новости

В Bnews, устаревание cтатей выполняется программой expire, которая принимает список групп новостей как аргументы вместе с указанием времени, после которого статьи должны устареть. В C-News есть специальный файл explist, в котором можно указывать время старения для каждой группы новостей. Ежедневно вызывается команда doexpire (из демона cron), которая обрабатывает все группы в соответствии со списком.

Иногда Вы хотите сохранять статьи из некоторых групп даже после того, как они устарели; например, программы, зарегистрированные в comp.sources.unix. Это называется архивированием. Файл explist разрешает Вам отмечать группы для архивирования.

Записи в explist имеют следующий формат:
grouplist perm times archive

grouplist представляет собой разделенный запятыми список newsgroups (групп новостей), к которым применяется эта запись. Иерархии могут быть определены префиксом имени группы, необязательно добавляется ключ all. Например, для записи, обращающейся ко всем группам ниже иерархии comp.os, Вы могли бы ввести comp.os или comp.os.all.

При устаревании новости из группы, имя будет проверено для всех записей в explist в данном порядке. Применяется первая соответствующая запись. Например, чтобы отбросить большую часть comp через четыре дня, кроме comp.os.linux.announce, которую Вы хотите хранить в течение недели, Вы просто должны иметь запись для comp.os.linux.announce, которая определяет семидневный период хранения, сопровождаемую записью для comp, которая определяет четыре дня.

Поле perm задает детали, если запись применяется к модерируемой или другой группе с особым статусом. Оно может принимать значения m, u или x, которые обозначают модерируемый, немодерируемый или любой тип.

Третье поле, times, обычно содержит только одно число. Это число дней, после которых статьи будут устаревать, если им не были назначены особые даты в поле Expires: в заголовке статьи. Обратите внимание, что это число дней подсчитывается с момента поступления на Вашу машину, а не с даты отправки статьи в группу!

Поле times может быть и более сложным. Оно может быть комбинацией до трех чисел, отделяемых от друг друга тире. Первое обозначает число дней, которые должны пройти прежде, чем статья будет рассматривается кандидатом на устаревание. Использовать значение отличное от нуля редко бывает нужно. Второе поле определяет вышеупомянутое заданное по умолчанию число дней, после которых статья будет устаревать. Третья часть определяет число дней, после которых статья устареет безоговорочно независимо от того, имеет ли она поле Expires: или нет. Если задано только среднее число, другие два принимают значения по умолчанию. Они могут быть определены, используя специальную запись /bounds/, которая описана ниже.

Четвертое поле, archive, обозначает, должна ли newsgroup быть заархивирована и, если да, то где. Если никакого архивирования не нужно, должно использоваться тире. Иначе Вы либо используете полное имя (указывающее на каталог), либо знак (@). Знак обозначает заданный по умолчанию каталог архивов, который должен быть задан doexpire, используя параметр –a в командной строке. Каталог архивов должен принадлежать news. Когда doexpire архивирует статью из, скажем, comp.sources.unix , он сохраняет ее в подкаталоге comp/sources/unix в каталоге архивов, создавая его если он не существует. Но сам каталог архивов не будет создан автоматически.

Имеется две специальных записи в файле explist, на которые полагается doexpire. Вместо списка newsgroups, они имеют ключевые слова /bounds/ и /expired/. Запись /bounds/ содержит значения по умолчанию для трех значений поля times, описанного выше.

Поле /expired/ определяет, как долго C-News будет хранить строки в файле хронологии. Это необходимо, потому что C-News не будет удалять строку из файла хронологии, если соответствующая статья устарела, но будет хранить ее в случае, если дубликат должен прибыть после этой даты. Если Вы подпитываетесь новостями с одного сайта, можете задать небольшое значение. Иначе установите порядка двух недель, в зависимости от времени хранения статей (особенно в UUCP-сетях).

Простой файл explist воспроизведен ниже:
# keep history lines for two weeks. No article gets more than three months
/expired/                       x       14      -
/bounds/                        x       0-1-90  -
# groups we want to keep longer than the rest
comp.os.linux.announce          m       10      -
comp.os.linux                   x       5       -
alt.folklore.computers          u       10      -
rec.humor.oracle                m       10      -
soc.feminism                    m       10      -
# Archive *.sources groups
comp.sources,alt.sources        x       5       @
# defaults for tech groups
comp,sci                        x       7       -
# enough for a long weekend
misc,talk                       x       4       -
# throw away junk quickly
junk                            x       1       -
# control messages are of scant interest, too
control                         x       1       -
# catch-all entry for the rest of it
all                             x       2       -

С устареванием в C News имеется ряд потенциальных проблем при чистке. Например, Ваша программа чтения новостей (newsreader) могла бы полагаться на третье поле файла active, которое содержит номер самой старой статьи. При устаревании статьи C-News не модифицирует это поле. Если Вы хотите, чтобы это поле представляло реальную ситуацию, Вы должны выполнить программу, называемую updatemin, после каждого выполнения doexpire. В старых версиях C-News аналогичные задачи возложены на скрипт upact.

Кроме того, C-News не сканирует каталоги новостей в поисках устаревших. Вместо этого он анализирует файл хронологии (файл history). А ведь совсем не факт, что этот файл соответствует реальному положению дел! Например, если он оказался неправильным, на диске появятся "вечные" статьи, которые не удалятся никогда, а вот место занимать будут. Для борьбы с ними есть скрпт addmissing в каталоге /usr/lib/news/maint, который добавляет потерянные статьи в файл, или mkhistory, который просто заново создает файл history. Эти команды должны выполняться от имени пользователя news, иначе Вы получите еще худшую ситуацию, когда C-News вообще не может прочитать или обновить файл history.