Détection automatique des modifications de fichiers et synchronisation via S3

J’ai un répertoire local de fichiers multimédia sur un système Linux, que je synchronise avec un compte Amazon S3 à l’aide d’un script s3sync. Actuellement, j’exécute manuellement le script s3sync lorsque je sais que les fichiers multimédias ont été modifiés.

Comment exécuter automatiquement le script lorsque des fichiers sont modifiés?

Je pensais créer une tâche cron pour exécuter le script toutes les quelques minutes, mais cela semble être une quantité excessive de traitement, car même s’il n’y a pas de changement, le script doit toujours parsingr toute la structure des répertoires.

J’ai également considéré incron / inotify , qui permet d’exécuter des commandes lorsqu’un fichier ou un répertoire spécifique change, mais ces outils ne semblent pas prendre en charge automatiquement les modifications de surveillance de l’intégralité d’un répertoire nested. Corrigez-moi si je me trompe, mais il semble que incron / inotify ne peut surveiller que les fichiers qui ont été explicitement contrôlés. Par exemple, si je souhaitais surveiller les modifications apscopes à tous les fichiers d’un répertoire, je devrais écrire des scripts distincts pour surveiller les ajouts / suppressions de répertoires et de fichiers afin de mettre à jour la liste des fichiers et répertoires surveillés par incron.

Y a-t-il des solutions plus efficaces?

Pour ce genre de tâches, j’utilise fssm gem.

créer un fichier 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 

puis:

 ruby watcher.rb 

Bien sûr, vous pouvez diaboliser, si vous voulez.

Voici un exemple de scénario que vous pouvez utiliser à la place et utilisez le script rsync simple.

http://andrewwilkinson.wordpress.com/2011/01/14/rsync-backups-to-amazon-s3/

Fondamentalement, cela signifie utiliser fuse et s3fs ( http://code.google.com/p/s3fs/ ) pour monter le partage s3 en tant que répertoire sur votre système de fichiers local et utiliser rsync pour synchroniser le 2. Le job cron simple ferait l’affaire.

Maintenant, il existe une solution efficace. Cela vient d’être annoncé (depuis longtemps):
http://aws.amazon.com/blogs/aws/s3-event-notification/

Il est très simple à mettre en œuvre – il est temps de jeter tous les travaux crus et les boucles de liste laids.