Tu crées une table avec une colonne contenant le nom de tes fichiers et une colonne avec l'état l'état de chacun d'entre eux. Optionnellement tu peux aussi mettre en place des colones avec date de début de traitement et date de fin de traitement pour pouvoir savoir ce qui se passe (voir plus loin).
Quand tu reçois un fichier, tu remplis ta table avec une nouvelle entrée (nom du fichier), et tu laisses l'état vide (ça veut dire que le fichier est en attente).
Puis toutes les minutes, tu récupère la liste des fichiers dont l'état n'est pas précisé. Pour chacun de ces fichiers, tu déclenches ton traitement, et tu flag le fichier comme étant "en cours de traitement" (tu pourrais même indiquer le PID du process qui exécute le traitement, ça pourrait te servir à controler si le processus qui a traité le fichier est toujours en vie). Enfin quand ton traitement est fini, tu mets à jour le champ avec -1 par exemple pour indiquer que c'est terminé. En bonus, tu peux même ajouter les dates de début/fin de traitement (permetde détecter des anomalies si un traitement n'est pas terminé depuis X minutes ou heures).
Les avantages : tu laisses la base gérer les accès concurrents (voir https://www.sqlite.org/faq.html#q5), tu as une visibilité précise de ce qui se passe, avec un gestionnaire de bases de données assez simple et léger. Tu peux mettre en place des procédures de reprise et de détection d'anomalies assez simplement. Pour les inconvénients, je dirais qu'il faut savoir gérer en ligne de commande les reprises lors des tentatives d'accès à une base busy, mais rien d'insurmontable à mon avis.
[^] # Re: changer la maniere de faire
Posté par totof2000 . En réponse au message J'ai une colle pour les experts shell ou système.. Évalué à 2.
sqlite est ton ami ...
Tu crées une table avec une colonne contenant le nom de tes fichiers et une colonne avec l'état l'état de chacun d'entre eux. Optionnellement tu peux aussi mettre en place des colones avec date de début de traitement et date de fin de traitement pour pouvoir savoir ce qui se passe (voir plus loin).
Quand tu reçois un fichier, tu remplis ta table avec une nouvelle entrée (nom du fichier), et tu laisses l'état vide (ça veut dire que le fichier est en attente).
Puis toutes les minutes, tu récupère la liste des fichiers dont l'état n'est pas précisé. Pour chacun de ces fichiers, tu déclenches ton traitement, et tu flag le fichier comme étant "en cours de traitement" (tu pourrais même indiquer le PID du process qui exécute le traitement, ça pourrait te servir à controler si le processus qui a traité le fichier est toujours en vie). Enfin quand ton traitement est fini, tu mets à jour le champ avec -1 par exemple pour indiquer que c'est terminé. En bonus, tu peux même ajouter les dates de début/fin de traitement (permetde détecter des anomalies si un traitement n'est pas terminé depuis X minutes ou heures).
Les avantages : tu laisses la base gérer les accès concurrents (voir https://www.sqlite.org/faq.html#q5), tu as une visibilité précise de ce qui se passe, avec un gestionnaire de bases de données assez simple et léger. Tu peux mettre en place des procédures de reprise et de détection d'anomalies assez simplement. Pour les inconvénients, je dirais qu'il faut savoir gérer en ligne de commande les reprises lors des tentatives d'accès à une base busy, mais rien d'insurmontable à mon avis.