自动检测文件更改并通过S3进行同步

时间:2011-12-07 14:54:56

标签: linux bash filesystems amazon-s3 inotify

我在Linux系统上有一个本地媒体文件目录,我使用s3sync脚本与Amazon S3帐户同步。目前,当我知道媒体文件已被修改时,我手动运行s3sync脚本。

修改文件后如何自动运行脚本?

我正在考虑创建一个cron作业来每隔几分钟运行一次脚本,但这似乎是一个过多的处理,因为即使没有更改,脚本仍然必须扫描整个目录结构,这是非常大。

我还考虑了incron/inotify,它允许在特定文件或目录更改时运行命令,但这些工具似乎不会自动支持监视对整个嵌套目录的更改。如果我错了,请纠正我,但似乎incron / inotify只能监控他们明确告知要监控的文件。例如如果我想监视目录中任何级别的所有文件的更改,我必须编写单独的脚本来监视目录和文件添加/删除,以更新incron监视的文件和目录列表。

是否有更有效的解决方案?

3 个答案:

答案 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作业和列表循环的时间。