Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

script : savoir si c'est la première exécution depuis le dernier démarrage

22 réponses
Avatar
Francois Lafont
Bonjour à tous,

J'ai un script sur une Debian Squeeze qui s'exécute de temps en temps de
manière automatique (en fait à chaque fois que la fenêtre de connexion
apparaît, c'est-à-dire à chaque démarrage mais aussi après chaque
fermeture de session). L'exécution se fait via le compte root.

Je voudrais affiner le script pour qu'il se comporte légèrement
différemment suivant que l'exécution est la première depuis le dernier
démarrage ou non. Comment faire cela de manière fiable ?

J'avais pensé écrire un fichier « pipeau » dans /tmp, profitant du fait
que /tmp est vidé à chaque démarrage il me semble. Du coup, dans le
script, ça donnerait un truc dans le genre ça :

if [ -e /tmp/pipeau ]; then
# Alors ce n'est pas la première exécution
# depuis le dernier démarrage de la machine.
else
# Alors c'est la première exécution
# depuis le dernier démarrage de la machine.
# Du coup on crée le fichier.
touch /tmp/pipeau
fi

Mais je ne sais pas si c'est une bonne façon de faire :

1. Suis-je sûr que /tmp/pipeau sera effacé au prochain démarrage ?

2. Suis-je sûr qu'il ne peut pas être effacé à un moment donné alors
qu'il n'y a pas eu encore redémarrage ?

3. Lorsque je crée /tmp/pipeau, peut-être que ce fichier existe déjà
dans /tmp après tout (même si c'est hautement non probable) ?

Du coup, je me dis qu'on peut peut-être s'y prendre mieux que ça. :-)

Merci d'avance pour votre aide.

--
François Lafont

2 réponses

1 2 3
Avatar
Doug713705
Le 10-05-2012, Francois Lafont nous expliquait dans
fr.comp.os.linux.configuration :
Le 10/05/2012 12:19, Doug713705 a écrit :

1. Suis-je sûr que /tmp/pipeau sera effacé au prochain démarrage ?



Efface le toi même avec un script executé lors de l'extinction du
système.



Comme j'expliquais dans un message précédent, j'aimerais bien rendre le
script auto-suffisant et ne pas faire intervenir autre chose.




Quand je dis "efface le toi même", je veux dire "fais en sorte que ton
script l'efface plutôt que d'espérer que le système le fasse pour toi".

Pour ça, faire exécuter ton script par le système d'initialisation
officiel de ta distrib est le meilleur moyen.

Typiquement (je ne sais pas si c'est le cas pour Debian mais j'imagine
qu'il existe un mécanisme similaire), ton script est exécuté à chaque
démarrage avec au démarrage un argument "start" (à partir de là, il
vérifie la présence du fichier, fait sa comparaison et tout ce qu'il
doit faire) et un argument "stop" à la fermeture du système (et à
ce moment tu demandes à ton script d'effacer le fichier).

Prévoir si nécessaire le cas de l'hibernation qui est un cas particulier
de redémarrage.

--
Doug - Linux user #307925 - Slackware64 roulaize ;-)
http://usenet-fr.chainon-marquant.org
http://newsportal.chainon-marquant.org
http://news.chainon-marquant.org
Avatar
Arnaud Gomes-do-Vale
Je sais que j'arrive après la bagarre, juste quelques remarque.

Francois Lafont writes:

1. Suis-je sûr que /tmp/pipeau sera effacé au prochain démarrage ?

2. Suis-je sûr qu'il ne peut pas être effacé à un moment donné alors
qu'il n'y a pas eu encore redémarrage ?



Non, et non, respectivement. Je le mettrais plutôt dans /var/run ; ça
tord un peu la spécif mais le FHS dit explicitement qu'il doit être vidé
au boot, et toutes les distributions que je pratique le font, et
contrairement à /tmp il n'est pas nettoyé automatiquement tant que le
système tourne.

3. Lorsque je crée /tmp/pipeau, peut-être que ce fichier existe déjà
dans /tmp après tout (même si c'est hautement non probable) ?



if mkdir /var/run/pipeau 2>/dev/null
then
# c'est la premiere execution
else
# ce n'est pas la premiere execution
fi

Par rapport aux solutions à base de fichier, l'utilisation de mkdir a le
bon goût d'être atomique.

--
Arnaud
http://blogs.glou.org/arnaud/
1 2 3