Problème script bash (accès multiple)

Résolu/Fermé
gnugo - 27 janv. 2012 à 11:16
 gnugo - 2 févr. 2012 à 11:42
Bonjour,

Je suis entrain de faire un script en bash pour accèder à un fichier, lire son contenu, et, en fonction de ce contenu, le modifier à chaque accès.
Je voudrais faire cela de manière sécurisée : si mon script est appelé 2 fois en un temps très court, il pourrait très bien lire 2 fois le même contenu si le premier appel ne le modifie pas suffisamment vite.
Il faudrait peut être en quelque sorte qu'il bloque le fichier tant qu'il n'a pas fait sa modif, de sorte qu'au lancement suivant, le script lira forcément la valeur modifiée. Si le lancement précédent n'a pas terminé sa modif, il attend avant de faire son traitement+modif.
Une sorte de 'select for update' de sql mais en bash.

Est-il possible de faire ça ? Je ne vois pas comment faire.


Pour l'instant ...
function acces
{
val=$(cat fichier)
newval=$(traitement $val)
echo $val > fichier
echo $val
}

2 réponses

zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
27 janv. 2012 à 11:33
Salut,

Une solution consiste à tester la création d'un répertoire et en fonction du code retour le traitement est effectué ou pas...

if mkdir -p /tmp/verrou 2>/dev/null
then
traitement
rmdir /tmp/verrou
fi


Pour ton cas il faudra sûrement combiner ça avec un "else" contenant un "sleep nn", puis mettre le tout dans une boucle "while" et jouer avec les "break/continue".

;-))
1
merci!
Mais le problème c'est que si le script plante sans supprimer le dossier, alors ne verrou ne partira jamais.

En cherchant j'ai entendu parler d'une solution, qui utilise flock.
Mais j'ai un peu de mal à comprendre, le man n'est pas très clair, je continue à chercher
0
quand on fait
exec 8>lockfile;
flock -x 8;


savez vous que signifie le 8 ?
Je ne comprends pas bien le 8>fichier
0
en tout cas ça fonctionne

mais
8>fichier
ça correspond à quoi ?
0
dubcek Messages postés 18718 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 22 mars 2024 5 615
Modifié par dubcek le 27/01/2012 à 14:30
le fichier est créé avec le descripteur 8 et flock -x 8 vérouille sur ce descripteur
il y a un exemple là http://boris.muehmer.de/2011/08/08/bash-flock-example-ubuntulinux/
0
ok merci
J'espère qu'il n'y aura pas de conflit possible en fixant un numéro de descripteur au hasard
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
31 janv. 2012 à 12:22
Le seul qui risque de poser problème (et donc à éviter) c'est le "5" (voir la note "101" en bas de page)
0