21.5. 文章批处理

新闻批处理遵循特定格式,B News、C News 和 INN 都相同。每篇文章都以如下行开头
#! rnews count

计数是文章中的字节数。当您使用批处理压缩时,生成的文件将作为一个整体进行压缩,并在前面加上另一行,指示用于解压缩的消息。标准压缩工具是 compress,它由以下标记
#! cunbatch

有时,当新闻服务器通过邮件软件发送批处理时,该软件会删除所有数据的第八位,压缩的批处理可能会使用所谓的 c7-encoding 进行保护;这些批处理将由 c7unbatch 标记。

当批处理被馈送到远程站点的 rnews 时,它会检查这些标记并适当地处理批处理。一些站点也使用其他压缩工具,例如 gzip,并在其 gzip 压缩的文件前面加上单词 zunbatch。C News 不识别像这样的非标准标头;您必须修改源代码以支持它们。

在 C News 中,文章批处理由以下程序执行/usr/lib/news/batch/sendbatches,它从site/togo文件中获取文章列表,并将它们放入多个新闻批处理中。它应该每小时执行一次,甚至更频繁,具体取决于流量。它的操作由batchparms文件控制,该文件位于/var/lib/news。此文件描述了每个站点允许的最大批处理大小、要使用的批处理和可选压缩程序,以及将其传递到远程站点的传输方式。您可以按站点指定批处理参数,以及为未明确提及的站点设置一组默认参数。

安装 C News 时,您很可能会找到一个batchparms文件,其中包含合理的默认条目,因此您很有可能不必触摸该文件。以防万一,我们描述其格式。每行由六个字段组成,字段之间用空格或制表符分隔
site size max batcher muncher transport

站点

站点是条目适用的站点名称。该togo站点的文件必须位于out.going /togo新闻假脱机目录之下。站点名称 /default/ 表示默认条目,并且将匹配任何未直接指定唯一条目的站点。

大小

大小是创建的文章批处理的最大大小(压缩前)。对于大于此大小的单个文章,C News 会例外地将每个文章单独放入一个批处理中。

最大值

最大值是为特定站点创建和计划传输的最大批处理数量,超过此数量后,批处理将停止。如果远程站点长时间关闭,这将非常有用,因为它可以防止 C News 用大量新闻批处理塞满您的 UUCP 假脱机目录。

C News 使用 queuelen 脚本确定排队的批处理数量,该脚本位于/usr/lib/news/。如果您以预打包格式安装了 C News,则该脚本应该不需要任何编辑,但是如果您选择使用不同类型的假脱机目录,例如 Taylor UUCP,您可能必须编写自己的脚本。如果您不关心假脱机文件的数量(因为您是唯一使用计算机的人,并且您不以兆字节为单位编写文章),则可以将脚本的内容替换为简单的 exit 0 语句。

批处理程序

批处理程序字段包含用于从togo文件中的文章列表生成批处理的命令。对于常规馈送,这通常是 batcher。对于其他目的,可以提供替代批处理程序。例如,ihave/sendme 协议要求将文章列表转换为 ihavesendme 控制消息,这些消息发布到新闻组 to.site。这由 batchihbatchsm 执行。

压缩程序

压缩程序字段指定压缩命令。通常,这是 compcun,这是一个生成压缩批处理的脚本。[1] 或者,假设您创建一个使用 gzip 的压缩程序,例如gzipcun(请注意,您必须自己编写)。您必须确保远程站点上的 uncompress 已修补,以识别使用 gzip 压缩的文件。

如果远程站点没有 uncompress 命令,您可以指定 nocomp,它不执行任何压缩。

传输方式

最后一个字段,传输方式,描述要使用的传输方式。有许多用于不同传输的标准命令可用;它们的名称以 via 开头。sendbatches 在命令行上将目标站点名称传递给它们。如果batchparms条目不是 /default/sendbatches站点字段中派生站点名称,方法是剥离第一个点或斜杠之后(包括在内)的所有内容。如果 batchparms 条目是 /default/,则使用out.going中的目录名称。

要为特定站点执行批处理,请使用以下命令
# su news -c "/usr/lib/news/batch/sendbatches site"

当不带参数调用时,sendbatches 处理所有批处理队列。“全部”的解释取决于

中是否存在默认条目。batchparms如果找到默认条目,则检查/var/spool/news/out.going中的所有目录;否则,sendbatches 循环遍历batchparms中的所有条目,仅处理在那里找到的站点。请注意,sendbatches 在扫描out.going目录时,仅将不包含点或 at 符号 (@) 的目录作为站点名称。

有两个命令使用 uux 在远程系统上执行 rnewsviauuxviauuxz。后者设置–z标志,用于 uux,以防止旧版本为每篇已交付的文章返回成功消息。另一个命令 viamail 通过邮件将文章批处理发送到远程系统上的用户 rnews。当然,这要求远程系统以某种方式将所有发送给 rnews 的邮件馈送到其本地新闻系统。有关这些传输的完整列表,请参阅newsbatch手册页。

最后三个字段中的所有命令必须位于out.going/site/usr/lib/news/batch。它们中的大多数是脚本;您可以轻松地为您的个人需求定制新工具。它们通过管道调用。文章列表通过标准输入馈送到批处理程序,批处理程序在标准输出上生成批处理。然后将其通过管道传输到压缩程序,依此类推。

这是一个示例文件

# batchparms file for the brewery
# site        | size   |max    |batcher  |muncher    |transport
#-------------+--------+-------+---------+-----------+-----------
/default/       100000  22      batcher   compcun     viauux
swim             10000  10      batcher   nocomp      viauux

注释

[1]

与 C News 一起发布时,compcun 使用带有 12 位选项的 compress,因为这是大多数站点的最低公分母。您可以生成脚本的副本,例如 compcun16,您可以使用它进行 16 位压缩。不过,改进并不太令人印象深刻。