inotify 文件写入完成 - golang & Postfix

问题描述 投票:0回答:1

我在服务器上使用 Postfix 来接收电子邮件。 当收到电子邮件时,我想触发一些 golang 代码。 我正在使用

inotify
软件包,并正在监视
Maildir/new
文件夹中是否有新传入电子邮件。

我仅监视文件夹上的

IN_CLOSE_WRITE
事件,但我发现它从未被触发。仅触发
IN_CREATE
事件。

我假设当我监视文件夹而不是文件时,它只看到创建文件事件(因为它们影响文件夹),而不是文件稍后发生的情况(关闭写入)。

但是我事先并不知道该文件的名称,它是由 Postfix 创建的临时文件,超出了我的控制范围,我不想只是休眠 1 秒钟,因为 Postfix 可能需要更长的时间才能完成写入,然后另一方面,如果我尝试在该文件上快速设置监视,我可能会与 Postfix 处于竞争状态,因为它可能会比我建立初始监视更快地完成电子邮件写入,我将无法区分文件创建、写入和关闭以及正在进行的写入,因为在此期间没有触发事件。

你会如何优雅地解决这个问题? 我不想睡觉,因为它不优雅,我无法确定要睡多久,我希望它尽可能短,而且我不想与 Postfix 处于任何竞争状态。

go postfix-mta inotify
1个回答
0
投票

我相信 Postfix 可以轻松让您参与实际的交付事件。看看 Procmail 是如何做到的,甚至只是创建一个 Procmail 规则来在交付内容时运行您的脚本。

非常简短,在您的

.procmailrc
中,放入

:0c
| /path/to/your/binary

将每条传入消息的副本通过管道传输到您的二进制文件。

© www.soinside.com 2019 - 2024. All rights reserved.