0

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

inotify API 提供了一种监控文件系统事件的机制。Inotify 可用于监视单个文件或监视目录。

这正是我所需要的,然后我找到了“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,它将永远保持循环。我该如何阻止它?任何的想法?这是一个好方法吗?

4

3 回答 3

2

我建议看上帝。它是为此类任务而设计的,并且可以很容易地为后台和守护程序应用程序构建监控系统。

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

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

于 2012-11-30T05:19:30.347 回答
0

只需在后台运行您的脚本

ruby myRBNotifier.rb &

当您需要停止它时,找到进程 ID 并对其使用 kill :

ps ux
kill [whatever pid your process gets from the OS]

这是否回答你的问题?

于 2012-11-29T23:25:07.820 回答
0

如果您在 mac/unix 机器上运行,请查看launchctl 手册页。您可以设置一个进程以在文件更改时运行和执行 ruby​​ 脚本。它是高度可配置的。

于 2013-07-31T15:26:44.633 回答