我在Linux系统上有一个本地媒体文件目录,我使用s3sync脚本与Amazon S3帐户同步。目前,当我知道媒体文件已被修改时,我手动运行s3sync脚本。
修改文件后如何自动运行脚本?
我正在考虑创建一个cron作业来每隔几分钟运行一次脚本,但这似乎是一个过多的处理,因为即使没有更改,脚本仍然必须扫描整个目录结构,这是非常大。
我还考虑了incron/inotify,它允许在特定文件或目录更改时运行命令,但这些工具似乎不会自动支持监视对整个嵌套目录的更改。如果我错了,请纠正我,但似乎incron / inotify只能监控他们明确告知要监控的文件。例如如果我想监视目录中任何级别的所有文件的更改,我必须编写单独的脚本来监视目录和文件添加/删除,以更新incron监视的文件和目录列表。
是否有更有效的解决方案?
答案 0 :(得分:3)
对于这类任务,我正在使用fssm gem。
创建文件watcher.rb
require 'fssm'
FSSM.monitor('/dir_to_watch/', '**/*') do
update {|base, relative| `your_script` }
delete {|base, relative| `your_script` }
create {|base, relative| `your_script` }
end
然后:
ruby watcher.rb
当然,如果你愿意,你可以将它妖魔化。
答案 1 :(得分:2)
以下是您可能使用的示例方案,并使用简单的rsync脚本。
http://andrewwilkinson.wordpress.com/2011/01/14/rsync-backups-to-amazon-s3/
基本上是指使用fuse和s3fs(http://code.google.com/p/s3fs/)将s3共享作为本地文件系统上的目录挂载,并使用rsync同步2.简单的cron作业就可以了。
答案 2 :(得分:1)
现在有一个有效的解决方案。这刚刚宣布(姗姗来迟):
http://aws.amazon.com/blogs/aws/s3-event-notification/
实现起来非常简单 - 浪费掉所有丑陋的cron作业和列表循环的时间。