【发布时间】:2011-12-07 14:54:56
【问题描述】:
我在 Linux 系统上有一个本地媒体文件目录,我使用 s3sync 脚本与 Amazon S3 账户同步。目前,当我知道媒体文件已被修改时,我正在手动运行 s3sync 脚本。
文件修改后如何自动运行脚本?
我正在考虑创建一个 cron 作业以每隔几分钟运行一次脚本,但这似乎处理量过大,因为即使没有更改,脚本仍然需要扫描整个目录结构,即很大。
我还考虑过incron/inotify,它允许在特定文件或目录发生更改时运行命令,但这些工具似乎并不自动支持监视整个嵌套目录的更改。如果我错了,请纠正我,但似乎 incron/inotify 只能监控他们被明确告知要监控的文件。例如如果我想监视目录内任何级别的所有文件的更改,我必须编写单独的脚本来监视目录和文件添加/删除,以更新 incron 监视的文件和目录列表。
有没有更有效的解决方案?
【问题讨论】:
-
正如您所说的,inotify 机制 (API) 对目录不是递归的。因此,您需要为监视目录下的子目录创建额外的监视。还要记住,由于每个子目录都会建立一个 inotify watch,因此可能会达到每个用户的最大 inotify watch 数量。默认最大值为 8192,可以通过写入 /proc/sys/fs/inotify/max_user_watches 来增加。也许您可以查看 inotifywatch 源代码(处理递归目录)并在此基础上自己编写一些东西。
-
您也可以在自己的 shell 脚本中使用 inotifywait 命令。手册页中提供的示例看起来很有前景。
标签: linux bash filesystems amazon-s3 inotify