所以我在 Linode 1080 VPS 上部署了 Postfix + saslauthd + Courier-IMAP。我们是一家小公司,我们有大约 30 个帐户(为了方便起见,我使用物理 *nix 用户 + Maildirs,见下文),但我们通过自定义脚本广泛使用 Courier 的共享文件夹(用于多个帐户)功能用红宝石写的。它通过 Spamassassin 过滤电子邮件,读取包含一些规则的 YAML 文件,然后执行多项检查以查看在我们复杂的结构中将电子邮件归档到何处。Maildirs 和物理用户为我提供了所需的灵活性。
收到邮件,然后将其传递给我的脚本,该脚本在其主目录中用户的 .forward 文件中定义。
总而言之,该脚本大约需要 2 秒才能完成。现在,我们没有相对较高的电子邮件量(我估计每小时大约 30-50 封电子邮件),但我正在寻找加快速度的方法,同时确保我们的电子邮件负载是否变高(或者我们会遇到“垃圾邮件风暴”) '),我们的服务器不会突然内存不足等。我的问题是:
- 在将电子邮件传递给我的脚本之前,通过spamassassin守护程序过滤电子邮件的方法是什么(而不是每次收到邮件时都启动应用程序)?猜猜以我现在的方式做这件事是不好的做法。
- 有没有办法限制后缀同时传递给我的脚本的电子邮件数量?我不想让我的脚本同时运行 10 个实例。
- 我怎么能把我的脚本变成一个守护进程?这会让事情变得更快吗?
提前致谢。
PS:电子邮件(嗯,/home)存储在一个单独的 XFS 分区上,该分区使用 noatime 挂载。
在将电子邮件传递给我的脚本之前,通过 spamassassin 守护程序过滤电子邮件的方法是什么(而不是每次收到邮件时都启动应用程序)?猜猜以我现在的方式做这件事是不好的做法。
查看amavisd-new,它是用 perl 编写的。它将满足您的需求,在网络级别集成(如果您愿意的话)并提供防病毒扫描。大多数主要的 linux 发行版都将它作为预构建的包提供。您唯一需要担心的是,某些发行版会使用偶尔出现错误的陈旧版本。大多数这些错误会导致 amavis 楔入或终止;因此,如果它比官方网站上的版本旧 3 个版本,我会认真考虑手动管理那个包。
有没有办法限制后缀同时传递给我的脚本的电子邮件数量?我不想让我的脚本同时运行 10 个实例。
你说的是速率限制。鉴于服务器的“小”尺寸,我会将后缀速率限制器本身设置为每分钟 3-6 封电子邮件,而不是在扫描端设置它。如果您尝试接受所有内容的交付,垃圾邮件风暴只会阻塞您的队列,无论如何您最终都会积压。
我怎么能把我的脚本变成一个守护进程?这会让事情变得更快吗?
吨!在这方面我无法帮助您,但是预先启动您的脚本会减少大量开销。