我正在开发一款应用。我使用的操作系统是linux。我需要在目录中创建的文件上运行ruby脚本。我需要保持此脚本始终运行。我想到的第一件事是inotify:
inotify API提供了一种监视文件系统事件的机制。 Inotify可用于监视单个文件或监视目录。
这正是我所需要的,然后我发现" rb-inotify",一个包装杉木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
,它将永远保持循环。我怎么阻止它?任何的想法?这是一个好方法吗?
答案 0 :(得分:2)
我建议查看god。它专为此类任务而设计,可以很容易地为后台和守护程序应用程序构建监控系统。
至于主要代码本身,inotify不是跨平台的,所以如果你有可能需要在Windows或Mac OS上运行,那么你需要一个不同的解决方案。编写一小段代码来定期检查目标目录以进行更改并不困难。如果您需要知道更改了什么,请读取并缓存目录条目,然后在下次运行代码时对它们进行比较。在运行之间使用sleep
在循环之前等待一段时间。
做同样事情的老派方法是使用cron定期开始工作。该作业可以是您的脚本,通过将文件列表与缓存版本进行比较来检查文件列表是否已更改,然后在出现异常情况时根据需要执行操作。
答案 1 :(得分:0)
只需在后台运行
即可运行脚本ruby myRBNotifier.rb &
当您需要停止它时,找到进程ID并在其上使用kill:
ps ux
kill [whatever pid your process gets from the OS]
这会回答你的问题吗?
答案 2 :(得分:0)
如果您在mac / unix计算机上运行,请查看launchctl
man page。您可以设置一个进程,以便在文件发生更改时运行并执行ruby脚本。它具有高度可配置性。