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>
|