8

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

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

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

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

有没有更有效的解决方案?

4

3 回答 3

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

当然,如果你愿意,你可以妖魔化它。

于 2011-12-07T16:12:07.587 回答
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 作业就可以了。

于 2011-12-07T22:21:24.483 回答
1

现在有一个有效的解决方案。这刚刚宣布(姗姗来迟):
http ://aws.amazon.com/blogs/aws/s3-event-notification/

实现起来非常简单——是时候扔掉所有丑陋的 cron 作业和列表循环了。

于 2014-11-13T20:45:25.410 回答