因此,我在 Linode 1080 VPS 上部署了 Postfix + saslauthd + Courier-IMAP。我们是一家小公司,大约有 30 个帐户(为了方便起见,我使用物理 *nix 用户 + Maildirs,见下文),但我们大量使用 Courier 的共享文件夹(用于多个帐户)功能以及我用 Ruby 编写的自定义脚本。它通过 Spamassassin 过滤电子邮件,使用一些规则读取 YAML 文件,然后执行几项检查以查看在我们复杂的结构中将电子邮件归档到哪里。Maildirs 和物理用户为我提供了所需的灵活性。
邮件被接收,然后被传递到我的脚本,该脚本在用户主目录中的 .forward 文件中定义。
总而言之,该脚本大约需要 2 秒钟才能完成。现在,我们的电子邮件数量并不多(我估计每小时大约有 30-50 封电子邮件),但我正在寻找加快速度的方法,同时确保如果我们的电子邮件负载增加(或者我们遇到“垃圾邮件风暴”),我们的服务器不会突然内存不足等。我的问题是:
- 通过 spamassassin 过滤电子邮件的方法是什么守护进程(而不是每次收到邮件时都启动应用程序)然后再传递给我的脚本?我想现在这样做是不好的做法。
- 有没有办法限制 Postfix 同时传递给我的脚本的电子邮件数量?我不希望我的脚本同时运行 10 个实例。
- 我怎样才能将脚本变成守护进程?这样会不会让程序运行得更快?
提前致谢。
PS:电子邮件(嗯,/home)存储在使用 noatime 安装的单独 XFS 分区上。
答案1
在将电子邮件传递给我的脚本之前,如何通过 spamassassin 守护程序过滤电子邮件(而不是每次收到邮件时都启动应用程序)?我想按照我现在的方式做是不好的做法。
看着amavisd-新,它是用 perl 编写的。它将完成您所寻找的工作,在网络级别进行集成(如果您需要),并且还提供防病毒扫描。大多数主要的 Linux 发行版都将其作为预构建包提供。您唯一需要担心的是,某些发行版将使用偶尔会出现错误的过时版本。大多数这些错误会导致 amavis 卡住或终止;因此,如果它比官方网站上的版本早 3 个版本,我会认真考虑手动管理该包。
有没有办法限制 Postfix 同时传递给我的脚本的电子邮件数量?我不希望我的脚本同时运行 10 个实例。
您说的是速率限制。考虑到服务器的“小”规模,我会将 postfix 速率限制器本身设置为每分钟 3-6 封电子邮件,而不是将其设置在扫描端。如果您尝试接受所有邮件的递送,垃圾邮件风暴只会堵塞您的队列,最终您还是会积压邮件。
我怎样才能将脚本变成守护进程?这样会不会让程序运行得更快?
很多!在这方面我无法帮助你,但是预先启动你的脚本可以节省大量开销。