ruby - 每次在 linux 目录中创建新文件时运行一个进程

标签 ruby linux inotify

我正在开发一个应用程序。我使用的操作系统是linux。如果可能,我需要在目录中创建的文件上运行 ruby​​ 脚本。我需要让这个脚本一直运行。我首先想到的是inotify:

The inotify API provides a mechanism for monitoring file system events. Inotify can be used to monitor individual files, or to monitor directories.

这正是我需要的,然后我找到了“rb-inotify”,一个 fir inotify 的包装器。

您认为有比使用 inotify 更好的方法来满足我的需求吗?另外,我真的不明白我必须使用 rb-inotify 的方式。

例如,我只是创建一个 rb 文件:

notifier = INotify::Notifier.new
notifier.watch("directory/to/check",:create) do |event|
    #do task with event.name file
end

notifier.run

然后我只是 ruby myRBNotifier.rb,它将永远保持循环。我该如何阻止它?任何想法?这是一个好方法吗?

最佳答案

我建议查看 god .它专为此类任务而设计,可以非常轻松地为后台和守护程序应用程序构建监控系统。

至于主要代码本身,inotify 不是跨平台的,因此如果您有可能需要在 Windows 或 Mac OS 上运行,那么您将需要一个不同的解决方案。编写一小段代码来定期检查目标目录是否有更改并不难。如果您需要知道更改了什么,请读取并缓存目录条目,然后在下次代码运行时比较它们。在运行之间使用 sleep 在循环之前等待一段时间。

做类似事情的老派方法是使用 cron 定期启动工作。该作业可以是您的脚本,它通过将文件列表与缓存版本进行比较来检查文件列表是否已更改,然后在出现差异时根据需要采取行动。

关于ruby - 每次在 linux 目录中创建新文件时运行一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13634805/

相关文章:

ruby-on-rails - 如何确定字符串是否为数字?

ruby - Ruby 是函数式语言吗?

ruby - Ruby 中的多重继承?

php - 在 Linux 中终止 php 浏览器请求

linux - 不知道如何在 ubuntu 中挂载文件系统

c++ inotify - 观看多个目录/子目录

ruby - 如何制作无限枚举器

linux - 如何将命令的连续输出重定向到用 C 编写的程序的输入

linux - 在 Linux 中监视文件系统更改的最佳方法

c++ - 如何使用 Inotify 和 libev 在文件夹中获取新添加的文件?