existe t'il un moyen d'empecher le lancement d'un script shell jusqu'à sa fin s'il est deja en cours d'execution ?
Merci pour votre retour
existe t'il un moyen d'empecher le lancement d'un script shell jusqu'à sa fin s'il est deja en cours d'execution ?
Merci pour votre retour
le script peut être lancé par plusieurs users, je veux qu'il soit bloqué durant son exécution.
c'est à dire que si le user 1 lance le script, le second ne devrait pas avoir la main de lancer sauf si la première exécution s'arrête.
il suffit le script vérifie qu'il n'est pas dans la liste des processus en cours.
Il est préférable de passer par un service que les utilisateurs lancent par un simple start qui assurera l'exclusion mutuelle.
http://doc.ubuntu-fr.org/services
Contrôler les processus par le nom de leur script n'est pas sûr du tout. Le processus peut être lancé juste après le test (d'une seconde instance) avant que dans la table des proc le premier processus ne soit identifié par le nom du script. (j'ai vu ce comportement sous AIX ... je ne sais pas si linux propose une solution plus fiable)
Sinon il est aussi possible d'utiliser un fichier lock dont la présence indique que le processus est actif ou non.
Malheureusement, il suffit que l'utilisateur lance le binaire a la main pour que tu te retrouves avec deux instances.
En cas de crash du processus, le fichier de lock reste, et doit etre nettoye a la main.
La seule maniere propre et auto-nettoyante est l'ouverture d'une socket sur un port en particulier. Lors du lancement, le processus verifie s'il peut se binder au port ou non : oui, il se lance ; non, il s'arrete.
En cas de crash, les sockets sont automatiquement nettoyees par le systeme (timeout de 2 minutes dans le pire des cas, qui peut etre supprime dans les options de l'ouverture de socket).
pour le service il faut que le binaire ne soit executable que par sys ... mais effectivement ce n'est pas son rôle et cela peut poser des problèmes de droits d'utilisateur.
En cherchant un peu je viens de découvrir flock ça a l'air pas mal du tout. je regarde comment ça marche.
EDIT :
Donc apparemment il suffit de faire (dans le script à rendre exclusif ) :
Le mutex est bien libéré si le process est killé violamment.
Code : Sélectionner tout - Visualiser dans une fenêtre à part flock -nx 9 -c 'read toto;echo "bonjour $toto !!"'
C'est génial ce truc !
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager