在 Solaris 5.10 中更新文件夹时如何触发脚本?

在 Solaris 5.10 中更新文件夹时如何触发脚本?

我们正在尝试编写一个脚本,以便在文件放入文件夹后立即将其移走。实现此目的的一种方法是在 cron 调度程序的脚本中运行 rsync。

这种方法的问题是系统开销。我们不能每秒运行它,如果我们在一段时间间隔后运行它,那么我们会在该时间间隔内使文件容易受到攻击(发件人可以访问)。要求是文件一到达就消失。

我检查了 stackoverflow 并发现了因克朗命令。但这仅适用于 Linux,不适用于 Solaris。

答案1

  • 对于 Solaris 10,您可以尝试加明有一个 Solaris 端口这里

  • Solaris 11 及更新版本提供了原生且更高效的功能(文件事件通知)。

如果由于某种原因,Gamin 的轮询性质不适合您的需求,而您想保留在 Solaris 10 上,那么至少可以探索几种替代方法:

  • 启用 BSM 审核并跟踪 fc 事件(文件创建)。
  • 当在要监视的目录上创建文件时,使用 Dtrace 做出反应。

在后一种情况下,您甚至可以将目标文件从 dtrace 脚本本身的目录中移走。

答案2

我知道您明确声明了 Solaris 10,但如果您使用的是 Solaris 11,您可以使用观察目录基于 Solaris 文件事件通知的命令。因此,与本质上基于某种轮询的任何其他解决方案相比,您可以实现接近 0% 的系统开销。此命令是一个阻塞命令,它将永远等待(或使用带超时的参数)文件夹上发生的文件事件。最典型的是,它将用于等待新文件到达。

如果你真的坚持使用 Solaris 10 那么我不知道有什么方法可以不是以某种方式基于民意调查。

还值得注意的是,从 v7 开始,Java 有一个用于监视文件系统的内置机制。该解决方案的优点在于,它会自动利用适用于相关平台的最有效方法。换句话说,您的应用程序现在可以在 Solaris 10 上运行(大概是通过 Java 使用底层的某种轮询机制),然后当您迁移到 Solaris 11 时,同一应用程序将无缝地利用底层的 Solaris 文件事件通知机制。

相关内容