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

croner une tâche séquentiellement

18 réponses
Avatar
Stan
Bonjour,

Le titre n'est pas du tout évocateur ;-)

Je souhaite lancer une tâche toutes les 5 mn;
cependant, si cette dernière prend plus de 5mn,
je ne veux pas relancer une autre tâche avant que la précédente
ne soit terminée.

Comment résoudre cette contrainte le plus élégament possible ?
Merci d'avance.
--
-Stan

10 réponses

1 2
Avatar
Thomas Nemeth
Stan a tapoté :

Bonjour,

Je souhaite lancer une tâche toutes les 5 mn;
cependant, si cette dernière prend plus de 5mn,
je ne veux pas relancer une autre tâche avant que la précédente
ne soit terminée.

Comment résoudre cette contrainte le plus élégament possible ?


Ta tâche créée un fichier verrou lors de son lancement et l'efface
à la fin du traitement. Si une autre instance de ta tâche essaie
de démarrer et que le fichier verrou est présent alors elle se
termine sans effectuer ses opérations.

Attention aux crashes.


Merci d'avance.


'plaisir.


Thomas.

Avatar
Nicolas George
Thomas Nemeth wrote in message <ffaj6f$s5b$:
Ta tâche créée un fichier verrou lors de son lancement et l'efface
à la fin du traitement. Si une autre instance de ta tâche essaie
de démarrer et que le fichier verrou est présent alors elle se
termine sans effectuer ses opérations.

Attention aux crashes.


Pour que les crashes ne posent pas de problème, il suffit d'utiliser un
verrou noyau plutôt qu'un fichier verrou.

Avatar
Nicolas George
"Stan" wrote in message <ffains$s4s$:
Je souhaite lancer une tâche toutes les 5 mn;
cependant, si cette dernière prend plus de 5mn,
je ne veux pas relancer une autre tâche avant que la précédente
ne soit terminée.


Est-ce que tu as besoin que le début de la tâche soit exactement aux
multiples de 5 minutes ? Sinon, le plus simple de loin est :

while true; do
something
sleep 300
done

Avatar
Stan
"Thomas Nemeth" a écrit dans le message de
news:ffaj6f$s5b$
Stan a tapoté :

Bonjour,

Je souhaite lancer une tâche toutes les 5 mn;
cependant, si cette dernière prend plus de 5mn,
je ne veux pas relancer une autre tâche avant que la précédente
ne soit terminée.

Comment résoudre cette contrainte le plus élégament possible ?


Ta tâche créée un fichier verrou lors de son lancement et l'efface
à la fin du traitement. Si une autre instance de ta tâche essaie
de démarrer et que le fichier verrou est présent alors elle se
termine sans effectuer ses opérations.

Attention aux crashes.




Dans le même principe, on peut aussi utiliser une variable d'environnement.

--
-Stan


Avatar
Marc
Thomas Nemeth wrote:

Je souhaite lancer une tâche toutes les 5 mn;
cependant, si cette dernière prend plus de 5mn,
je ne veux pas relancer une autre tâche avant que la précédente
ne soit terminée.

Comment résoudre cette contrainte le plus élégament possible ?


Ta tâche créée un fichier verrou lors de son lancement et l'efface
à la fin du traitement. Si une autre instance de ta tâche essaie
de démarrer et que le fichier verrou est présent alors elle se
termine sans effectuer ses opérations.

Attention aux crashes.


Tant qu'à faire, on peut stocker le pid du processus qui gère la tâche
dans le fichier, histoire de pouvoir vérifier s'il tourne encore. Et
vérifier si la date de création du fichier n'est pas trop ancienne non
plus, auquel cas le processus est sans doute parti dans l'espace et on
aura envie de le tuer.


Avatar
Stan
"Nicolas George" <nicolas$ a écrit dans le message de
news:4718d35e$0$8812$
"Stan" wrote in message <ffains$s4s$:
Je souhaite lancer une tâche toutes les 5 mn;
cependant, si cette dernière prend plus de 5mn,
je ne veux pas relancer une autre tâche avant que la précédente
ne soit terminée.


Est-ce que tu as besoin que le début de la tâche soit exactement aux
multiples de 5 minutes ? Sinon, le plus simple de loin est :


Non, pas besoin d'un multiple de 5mn.

while true; do
something
sleep 300
done


A quoi sert le sleep 300 ?

--
-Stan


Avatar
Thierry PINELLI
Stan wrote:

A quoi sert le sleep 300 ?


man sleep

oui, je sais, c'est réchauffé

Avatar
Stan
"Thierry PINELLI" a écrit dans le message de
news:ffaldt$53e$
Stan wrote:

A quoi sert le sleep 300 ?


man sleep

oui, je sais, c'est réchauffé


Je reformule ma question :
quelle est le rôle de la pause ?

--
-Stan


Avatar
Olivier Miakinen

Je reformule ma question :
quelle est le rôle de la pause ?


Puisqu'il faut mettre les points sur les i :

300 secondes = 5 fois 60 secondes = 5 minutes

Avatar
Nicolas George
Marc wrote in message <ffak67$qpf$:
Tant qu'à faire, on peut stocker le pid du processus qui gère la tâche
dans le fichier, histoire de pouvoir vérifier s'il tourne encore. Et
vérifier si la date de création du fichier n'est pas trop ancienne non
plus, auquel cas le processus est sans doute parti dans l'espace et on
aura envie de le tuer.


Comment accumuler hacks ignobles et pas fiables sur hacks ignobles et pas
fiables quand il y a une solution fiable et propre.

1 2