Contenu | Rechercher | Menus

Annonce

Le forum rencontre en ce moment quelques soucis de charge, il est possible qu'une erreur soit affichée quand vous postez un message, ne rechargez pas la page au risque de poster une seconde fois votre message

Si vous rencontrez des soucis à rester connecté sur le forum (ou si vous avez perdu votre mot de passe) déconnectez-vous et reconnectez-vous depuis cette page, en cochant la case "Me connecter automatiquement lors de mes prochaines visites".

#1 Le 08/02/2010, à 11:57

Ne lancer qu'une fois un script

Pour éviter de lancer deux fois en même temps un script, j'ai fait :

#!/bin/bash
# Test si déjà lancé (par le même utilisateur)
res=`ps U \`whoami\`|grep -c "$0"`
if (( res > 3 ))
then
 echo "script Déjà lancé"
 exit
fi
# Suite du script...

C'est bon ? Y'a quelque chose qui cloche ou quelque chose de plus simple ?

Par contre je ne comprends pas pourquoi le "grep -c" me sort 3 et pas 2 : Il doit trouver le processus, le grep et puis c'est tout ? d'ailleurs si je remplace grep -c par un grep normal, il m'affiche bien deux lignes...


Linux-Mint Maya 64 Cinnamon sur Toshiba Satellite P200-1BY. Linux-Mint  Nadia 64 Cinnamon sur Compaq Presario SR5617FR

Hors ligne

#2 Le 08/02/2010, à 12:15

Re : Ne lancer qu'une fois un script

 
 
pidof -x -o $$ ${0##*/} && exit

Neon Suite by FRUiT (kde4.6) http://tinyurl.com/yzm7cee
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean

Hors ligne

#3 Le 08/02/2010, à 18:19

Re : Ne lancer qu'une fois un script

oO

Si vous voulez un lock digne de ce nom, un peu de doc dans la langue de Jimmy Hendrix : http://www.bash-hackers.org/wiki/doku.php/howto/mutex


bashfr.org(random);
<veins> j'ai un truc debile a te demander
<veins> mmh en fait non
<veins> j'ai trouve la solution en reflechissant a la question

En ligne

#4 Le 08/02/2010, à 20:36

Re : Ne lancer qu'une fois un script

@sputnick :
C'est n'est pas un lock que je veux. Simplement, ne pas lancer deux fois la même tâche. La solution "pidof" me convient bien, quoique un peu "obsfuscated" comme code.

J'ai préféré :

pid=`pidof -x -o $$ ${0##*/}`
if [ -n "$pid" ]
then
 echo "Déjà lancé"
 exit
fi

Quoique, dans l'absolu, je préfère mon code, qui n'interdit pas de lancer le script chez un autre utilisateur... (bon, je suis le seul utilisateur, y'a pas de problème, mais pour la beauté de la chose...)


Linux-Mint Maya 64 Cinnamon sur Toshiba Satellite P200-1BY. Linux-Mint  Nadia 64 Cinnamon sur Compaq Presario SR5617FR

Hors ligne

#5 Le 08/02/2010, à 22:24

Re : Ne lancer qu'une fois un script

oO

Un lock sert justement a s'assurer qu'une seule instance d'un script est en cours d'execution.
Un lock bien étudié est dit "atomique" -> http://fr.wikipedia.org/wiki/Atomicit%C3%A9_%28informatique%29
Pour un fonctionement prévisible, optimal et fiable, c'est la solution à envisager.
Peux etre n'a tu pas besoin de choses aussi fiables, mais que les personnes qui lisent celà si, donc autant leur donner de bons conseils.


bashfr.org(random);
<veins> j'ai un truc debile a te demander
<veins> mmh en fait non
<veins> j'ai trouve la solution en reflechissant a la question

En ligne

#6 Le 08/02/2010, à 22:32

Re : Ne lancer qu'une fois un script

Moi je te remercie sputnick je connaissait pas cette méthode tongue


Welcome to the real world
________________________________

Hors ligne

#7 Le 08/02/2010, à 22:40

Re : Ne lancer qu'une fois un script

Bonjour, c'est utilisé dans pas mal de programme

apt-get,synaptic (l'histoire du /dkpg/lock)
mpd avec son fichier mpd.pid

et j'en passe

Merci pour le lien sputnick

Hors ligne

Haut de page ↑