21.1. 新闻发布

文章可以通过多种方式馈送到 C 新闻中。当本地用户发布文章时,新闻阅读器通常会将其交给 inews 命令,该命令会完成标头信息。来自远程站点的新闻,无论是单篇文章还是整个批次,都会被交给 rnews 命令,该命令将其存储在/var/spool/news/in.coming目录中,稍后将由 newsrun 拾取。然而,使用这两种技术中的任何一种,文章最终都会被交给 relaynews 命令。

对于每篇文章,relaynews 命令首先通过查找history文件中的消息 ID 来检查本地站点是否已经看过该文章。重复的文章将被丢弃。然后 relaynews 查看Newsgroups标头行,以了解本地站点是否请求来自这些组的文章。如果请求,并且新闻组在active文件中列出,则 relaynews 尝试将文章存储在新闻假脱机区域中的相应目录中。如果该目录不存在,则会创建该目录。然后,文章的消息 ID 将记录到history文件中。否则,relaynews 将丢弃该文章。

有时,relaynews 无法存储传入的文章,因为该文章发布到的组未在您的active文件中列出。在这种情况下,文章将被移动到 junk 组。[1] relaynews 还会检查过时或日期错误的的文章并拒绝它们。由于任何其他原因而失败的传入批次将被移动到/var/spool/news/in.coming/bad,并记录错误消息。

之后,文章将被中继到所有其他请求来自这些组的新闻的站点,使用的传输方式是为每个特定站点指定的。为了确保文章不会发送到已经看过的站点,每个目标站点都会根据文章的Path标头字段进行检查,该字段包含文章到目前为止遍历过的站点列表,以 第 17 章 中描述的 UUCP 风格的 bang-path 源路由风格编写。如果目标站点的名称未出现在此列表中,则文章将发送到该站点。

C 新闻通常用于在 UUCP 站点之间中继新闻,尽管也可以在 NNTP 环境中使用它。要将新闻传递到远程 UUCP 站点,无论是单篇文章还是整个批次,都使用 uux 在远程站点上执行 rnews 命令,并将文章或批次通过标准输入馈送到该命令。有关 UUCP 的更多信息,请参阅 第 16 章

批处理是用于描述一次传输中发送大量单个文章的术语。当为给定站点启用批处理时,C 新闻不会立即发送任何传入的文章;相反,它将其路径名附加到一个文件中,通常称为out.going/site/togo。定期地,一个程序从 cron 程序通过 crontab 条目执行,该程序读取此文件并将所有列出的文章捆绑到一个或多个文件中,可以选择压缩它们并将它们发送到远程站点的 rnews[2]

图 21-1 显示了通过 relaynews 的新闻流。文章可以中继到本地站点(用 ME 表示)、通过电子邮件中继到名为 ponderosa 的站点,以及中继到启用批处理的名为 moria 的站点。

图 21-1. 通过 relaynews 的新闻流

注释

[1]

您的站点上存在的组与您的站点愿意接收的组之间可能存在差异。例如,订阅列表可能指定 comp.all,这应该发送 comp 层次结构下的所有新闻组,但在您的站点上,您可能未在active文件中列出几个 comp 新闻组。发布到这些组的文章将被移动到 junk

[2]

请注意,这应该是 newscrontab;文件权限不会被破坏。