9. 运行系统的组件

本章回顾运行中的 CNews+NNTPd 服务器的组件。在基于 INN 的系统中也会发现类似的组件。我们邀请熟悉 INN 的读者添加他们对本章的贡献。

9.1. /var/lib/news:CNews 控制区域

此目录更广为人知的是 $NEWSCTL。它包含配置、日志和状态文件。这里不存放文章或二进制文件。让我们看看其中一些文件的用途。控制文件在 "第 4.3 节>" 中有更详细的介绍。

9.2. /var/spool/news:文章存储库

这也称为$NEWSARTS$NEWSSPOOL目录。这是文章驻留在您的磁盘上的位置。二进制文件或控制文件不应属于此处。应为此目录分配足够的空间,因为文章数量随着消化的每个批处理而不断增加。以下子目录的解释将使您对此目录有一个概览。

9.3. /usr/lib/newsbin:可执行文件

稍后添加

9.4. crontab 和 cron 任务

Usenet 新闻服务器的核心是在固定时间间隔运行的各种脚本,这些脚本处理文章、消化/拒绝文章并将文章传输到 NDN。我将尝试列举足够重要以至于需要 cron 的脚本。 :)

9.5. newsrunrelaynews:消化接收到的文章

Usenet 新闻系统的核心和灵魂,newsrun只是拾取in.coming目录的$NEWSARTS中的批处理/文章,并解压缩它们(如果需要),然后调用relaynews。它应该从 cron 运行。

relaynews通过stdin逐个拾取每篇文章,通过查找sys文件来确定它是否属于订阅组,在history文件中查找以确定它是否已在本地存在,消化它,更新activehistory文件,并将其批处理以供邻近站点使用。在处理文章时遇到问题时记录错误,如果碰巧是控制消息,则采取适当的措施。更多信息请参见relaynews.

9.6. doexpireexpire的手册页:删除旧文章

$NEWSARTS区域中删除不需要/旧文章的好方法是每天运行一次doexpire。它从explist目录中读取$NEWSCTL文件,以确定今天哪些文章过期。如果配置了,它可以存档所述文章。然后,它会相应地更新activehistory文件。如果您希望在history文件中保留文章条目,以避免在文章过期后将其作为新文章重新消化,请在控制文件中添加特殊的 /expired/; 行。有关选项和功能的更多信息,请参阅expire手册页。

9.7. nntpdmsgidd:管理 NNTP 接口

正如在关于设置软件的章节中已经讨论过的,nntpd是一个基于 TCP 的服务器守护程序,在inetd下运行。当 NNTP 端口上有传入连接时,它由inetd触发,并从那里接管对话。它读取$NEWSCTL中的 C-News 配置和数据文件,来自$NEWSARTS>的文章文件,并接收传入的帖子和传输。它忠实地将这些排队到$NEWSARTS/in.coming中,无论是作为批处理文件还是单个文章文件。

重要的是将inetd配置为以用户nntpdnews而不是root身份触发,就像它对其他守护程序(如telnetdftpd)所做的那样。如果未正确完成此操作,则可能会在以后导致 C-News 系统功能出现许多问题。

nntpd每次收到新的 NNTP 连接时都会触发nntpd,并在 NNTP 客户端关闭其连接后立即终止。因此,如果一个通过传入的批处理馈送(不是POST而是XFERnntpd)接收了一些文章,则另一个nntpd直到批处理被消化后才会知道这些文章的接收情况。如果多个上游 NDN 通过 NNTP 向我们的服务器馈送同一组文章,这将妨碍重复的新闻馈送检测。为了解决这个问题,msgidd使用了一个盟友,消息 ID 守护程序。此守护程序在服务器启动时通过newsboot$NEWSCTL触发一次,并在后台静默运行,在nntpd区域中的命名 Unix 套接字上监听。它在其内存中保存了各种

实例要求其记住的所有消息 ID 的列表。nntpd因此,当一个msgidd副本接收到传入的新闻文章馈送时,它会通过 Unix 套接字使用这些消息的消息 ID 更新nntpd。当稍后触发另一个nntpd,并且 NNTP 客户端尝试向其馈送更多文章时,msgidd会针对msgidd检查每个消息 ID。由于

将所有这些 ID 存储在内存中,因此查找速度非常快,并且重复的文章在 NNTP 接口本身就被阻止了。nntpd在运行的系统上,预计对于每个活动的 NNTP 连接,都会看到一个msgidd实例,并且只有一个nntpd实例在后台静默运行,几乎不消耗任何 CPU 资源。我们的nntpd配置为在 NNTP 连接空闲超过几分钟时终止,从而节省服务器资源。这不会给用户带来不便,因为现代 NNTP 客户端只需重新连接。如果发现

9.8. 实例运行了数天,则要么是由于网络错误而挂起,要么是从您的上游服务器接收非常长的传入 NNTP 馈送。我们过去每天通过持续 18 到 20 小时不间断的 NNTP 会话从我们的服务提供商那里接收主要传入馈送。nov

,新闻概述系统From, NOV,新闻概述系统是 C-News 和 NNTP 系统以及 NNTP 协议的最新增强功能。此子系统为每个活动新闻组维护一个文件,其中为当前每篇文章维护一行。此行文本包含有关文章的一些关键元数据,例如, SubjectDate实例运行了数天,则要么是由于网络错误而挂起,要么是从您的上游服务器接收非常长的传入 NNTP 馈送。我们过去每天通过持续 18 到 20 小时不间断的 NNTP 会话从我们的服务提供商那里接收主要传入馈送。的内容以及文章大小和消息 ID。这大大加快了 NNTP 响应。nntpd库已集成到

代码以及 C-News 的关键二进制文件中,从而在从存储库添加或删除文章时提供新闻概述数据库的无缝维护。newsrunstarcom.test添加文章时,它还会更新$NEWSARTS/starcom/test/.overviewnntpd,并在其中添加一行包含相关数据(制表符分隔)的行。当与 NNTP 客户端一起启动并看到XOVERNNTP 命令时,它会读取此.overviewexpire文件,并将相关行返回给 NNTP 客户端。当NNTP 命令时,它会读取此删除文章时,它也会从

文件中删除相应的行。因此,NOV 数据库的维护是无缝的。

9.9. 使用 UUCP 和 NNTP 批处理馈送