#1 Le 08/02/2010, à 10:57
- serged
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...
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
Hors ligne
#2 Le 08/02/2010, à 11:15
- FRUiT
Re : Ne lancer qu'une fois un script
pidof -x -o $$ ${0##*/} && exit
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#3 Le 08/02/2010, à 17:19
- sputnick
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
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#4 Le 08/02/2010, à 19:36
- serged
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...)
LinuxMint Vera Cinnamon et d'autres machines en MATE, XFCE... 20.x , 21.x ou 19.x
Tour : Asus F2A55 / AMD A8-5600K APU 3,6GHz / RAM 16Go / Nvidia GeForce GT610 / LM21.1 Cinnamon
Portable : LDLC Mercure MH : Celeron N3450 /RAM 4Go / Intel HD graphics 500 i915 / biboot Win 10 (sur SSD) - LM21.1 MATE (sur HDD)
Hors ligne
#5 Le 08/02/2010, à 21:24
- sputnick
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.
On ne peut pas mettre d'array dans un string!
https://sputnick.fr/
Hors ligne
#6 Le 08/02/2010, à 21:32
- n3o51
Re : Ne lancer qu'une fois un script
Moi je te remercie sputnick je connaissait pas cette méthode
Welcome to the real world
________________________________
Hors ligne
#7 Le 08/02/2010, à 21:40
- wido
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