abonnel-siteweb/data/pages/informatique/bash/execution-unique-d-un-scrip...

47 lines
1.3 KiB
Plaintext

====== Exécution unique d'un script BASH ======
{{ :dummy.png?75x75|Nom de la section}}
Il arrive que l'on est besoin d'exécuter de manière un script. C'est à dire que le script ne doit pas démarré alors que le précédent lancement n'est pas terminé.
Il faut savoir que lorsqu'un script ou un programme s'exécute, le système d'exploitation lui attribue un identifiant unique, appelé **process id**.
Le script doit s'assurer une execution unique. Pour se faire, il déclarera son **process id** dans un fichier. Le fichier sera consulté systématiquement au démarrage. Si le **process id** est toujours en cours d'exécution, alors l'exéction qui vient de démarrer, s'arrêtera.
Voici l'algo proposé :
<code>
lire le process id dans le fichier
le process existe-il encore ?
si oui
alors EXIT
sinon
remplacer le process id par le notre
continuer l'execution du script
...
supprimer le fichier contenant le process id
</code>
En BASH, voici le code proposé pour un script de sauvegarde :
<code BASH>
if [ -f /root/save.pid ]; then
pid_in_file=$(cat /root/save.pid)
if [ -d /proc/$pid_in_file ]; then
echo -e Une sauvegarde est en cours
exit;
else
rm /root/save.pid
fi
fi
echo $$>/root/save.pid
....
rm /root/save.pid
</code>