Mysql
 sql >> Base de données >  >> RDS >> Mysql

Comment gérer les nouveaux fichiers à traiter dans le travail cron

Un bon moyen de gérer/traiter les fichiers créés à des moments aléatoires est d'utiliser incron plutôt que cron . (Remarque :puisque incron utilise inotify du noyau Linux syscalls, cette solution ne fonctionne qu'avec Linux.)

Alors que cron exécute une tâche basée sur des dates et des heures, incron exécute un travail basé sur les modifications dans un répertoire surveillé. Par exemple, vous pouvez configurer incron pour qu'il exécute une tâche chaque fois qu'un nouveau fichier est créé ou modifié.

Sur Ubuntu, le paquet s'appelle incron . Je ne suis pas sûr de RedHat, mais je pense que c'est le bon package :http://rpmfind.net//linux/RPM/dag/redhat/el5/i386/incron-0.5.9-1.el5.rf. i386.html .

Une fois que vous avez installé le paquet incron, lisez

man 5 incrontab 

pour plus d'informations sur la configuration du fichier de configuration incrontab. Votre incron_config le fichier pourrait ressembler à ceci :

/var/ss01/ IN_CLOSE_WRITE /path/to/processing/script.py $#
/var/ss02/ IN_CLOSE_WRITE /path/to/processing/script.py $#
/var/ss03/ IN_CLOSE_WRITE /path/to/processing/script.py $#
/var/ss04/ IN_CLOSE_WRITE /path/to/processing/script.py $#

Ensuite, pour enregistrer cette configuration avec le démon incrond, vous exécuteriez

incrontab /path/to/incron_config

C'est tout ce qu'on peut en dire. Désormais, chaque fois qu'un fichier est créé dans /var/ss01, /var/ss02, /var/ss03 ou /var/ss04, la commande

/path/to/processing/script.py $#

est exécuté, avec $# remplacé par le nom du fichier nouvellement créé.

Cela évitera d'avoir à stocker/comparer les hachages, et les fichiers ne seront traités qu'une seule fois, immédiatement après leur création.

Assurez-vous simplement que votre script de traitement n'écrit pas dans le niveau supérieur des répertoires surveillés. Si c'est le cas, alors incrond remarquera le nouveau fichier créé et relancera script.py, vous envoyant dans une boucle infinie.

incrond surveille les répertoires individuels et ne surveille pas les sous-répertoires de manière récursive. Ainsi, vous pouvez demander à tshark d'écrire dans /var/ss01/tobeprocessed, utiliser incron pour surveiller/var/ss01/tobeprocessed et faire écrire votre script.py dans /var/ss01, par exemple.

PS. Il existe également une interface python pour inotify, appelée pyinotify . Contrairement à incron, pyinotify peut surveiller de manière récursive les sous-répertoires. Cependant, dans votre cas, je ne pense pas que la fonctionnalité de surveillance récursive soit utile ou nécessaire.