Problème script bash (accès multiple)
Résolu
gnugo
-
gnugo -
gnugo -
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
}
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
}
A voir également:
- Problème script bash (accès multiple)
- Acces rapide - Guide
- Script vidéo youtube - Guide
- Accès refusé - Guide
- Trousseau d'accès iphone - Guide
- Ecran multiple pc - Guide
2 réponses
Salut,
Une solution consiste à tester la création d'un répertoire et en fonction du code retour le traitement est effectué ou pas...
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".
;-))
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".
;-))
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
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
Le seul qui risque de poser problème (et donc à éviter) c'est le "5" (voir la note "101" en bas de page)