croner une tâche séquentiellement

Le
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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 2
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Thomas Nemeth
Le #776563
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.

Nicolas George
Le #776321
Thomas Nemeth wrote in message
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.

Nicolas George
Le #776320
"Stan" wrote in message
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

Stan
Le #776319
"Thomas Nemeth" 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


Marc
Le #776318
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.


Stan
Le #776317
"Nicolas George" news:4718d35e$0$8812$
"Stan" wrote in message
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


Thierry PINELLI
Le #776315
Stan wrote:

A quoi sert le sleep 300 ?


man sleep

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

Stan
Le #776314
"Thierry PINELLI" 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


Olivier Miakinen
Le #776313

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

Nicolas George
Le #776064
Marc wrote in message
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.

Publicité
Poster une réponse
Anonyme