Voilà mon problème, j'aimerai pouvoir lancer ce script balai même quand incrond est en train de tourner. La plupart du temps, ce script ne devrait rien voir et ne pas prendre en charge de fichiers dans les dossiers de réception car incrond est très rapide et le script de dispatch est très court...
C'est de la bricole selon moi. Ca marche pour l'instant, mais pour ma part c'est pas assez déterministe pour passer en production. Qu'est-ce qui va se passer si toi (ou un de tes collègues) modifie le script de traitement pour lui faire faire une opération plus longue qu'une minute ? Ton "script balai" risque d'essayer de traiter un fichier déjà en cours de traitement par incron.
La solution à base de verrou qui t'a déjà été proposée est plus fiable. Plus courte également je pense :
#!/bin/bash[$# -eq 1]||{
>&2echo"Usage: ${0##*/} filename"exit1}[ -f "1ドル"]||{
>&2echo"'1ドル' not exists or is not regular file!"exit1}(
flock -nx 200||{
>&2echo"'1ドル' is already being processed!"exit1}printf"Processing..."
sleep 5&& rm "1ドル"&&printf"ok!\n")200<"1ドル"
Si on le lance 2 fois sur le même fichier :
$ ./worker test.txt
Processing...ok!
$ ./worker test.txt
'test.txt' is already being processed!
[^] # Re: changer la maniere de faire
Posté par guppy . En réponse au message J'ai une colle pour les experts shell ou système.. Évalué à 1.
C'est de la bricole selon moi. Ca marche pour l'instant, mais pour ma part c'est pas assez déterministe pour passer en production. Qu'est-ce qui va se passer si toi (ou un de tes collègues) modifie le script de traitement pour lui faire faire une opération plus longue qu'une minute ? Ton "script balai" risque d'essayer de traiter un fichier déjà en cours de traitement par incron.
La solution à base de verrou qui t'a déjà été proposée est plus fiable. Plus courte également je pense :
Si on le lance 2 fois sur le même fichier :