将文件创建强制通知到 FAM 或 lighttpd

Force notification of file creation to FAM or lighttpd

环境:Debian、lighttpd、fam。不清楚虚拟专用服务器的内核Dnotify是否启用

我的 CGI 在文件系统中创建文件后,它会向客户端响应一条短消息,java 脚本 运行 在浏览器中,通知客户端文件已准备好下载。这里有一个问题——大多数时候客户端从 lighttpd 收到 http 404 错误,尤其是当本地主机中所有这些软件 运行 时。我认为这个问题是由于文件创建时 fam 通知 lighttpd 的延迟造成的。我想所有事件都按以下顺序发生:

  1. CGI 创建文件。
  2. CGI 响应客户端。
  3. 客户端从 lighttpd 获取文件。
  4. lighttpd 未在其缓存中找到该文件。

我可以想象,一旦文件在远程主机上创建并通过 NFS 通知到 lighttpd,这样的问题会更糟。

我的问题是:如何编写 CGI 代码以在响应客户端之前告知 lighttpd 有关文件创建的信息?

也就是说,我如何 "insert" 在上述步骤 1.2. 之间添加一个通知步骤?如果我不能用 lighttpd 做到这一点但我可以用 nginx 做到这一点,我也可以考虑切换到后者。同样,我会很好地从 fam 切换到其他文件交替监视器。

此致,

lighttpd 没有缓存不存在的文件,因此问题更有可能出现在您的 CGI 脚本中。 CGI 脚本应该创建文件并关闭它,以便内核知道内容应该刷新到磁盘,因为它们可能仍然在 CGI 进程中缓冲在 stdio 中。只有在那之后,脚本才会向客户端发送消息。

如您所述,如果 CGI 运行 在与接收第二个文件请求的服务器不同的服务器上,并且文件存储在 NFS 或其他远程文件系统上,则需要额外的步骤。最简单的解决方案是让客户端等待一两秒钟,然后重试几次下载文件,因为典型的 NFS 缓存设置大约为 5 秒。