47 lines
1.3 KiB
Plaintext
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> |