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
Et évidemment, si le boulot prend typiquement 40 secondes, on pourra réduire la pause à 260.
Stan
"Olivier Miakinen" <om+ a écrit dans le message de news:4718daa0$
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
oops. Voilà ce que c'est que de faire deux choses à la fois ;-)
Mais en fait, cette solution ne me satisfait qu'a moitié; dans l'idéal, il faudrait que tant que la durée de traitement est inférieure à 5 mn, je garde la granularité de 5mn; mais si le traitement dépasse les 5 mn, idéalement, il faudrait enchainer avec un nouveau traitement...
-- -Stan
"Olivier Miakinen" <om+news@miakinen.net> a écrit dans le message de
news:4718daa0$1@neottia.net...
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
oops.
Voilà ce que c'est que de faire deux choses à la fois ;-)
Mais en fait, cette solution ne me satisfait qu'a moitié;
dans l'idéal, il faudrait que tant que la durée de traitement est
inférieure à 5 mn, je garde la granularité de 5mn;
mais si le traitement dépasse les 5 mn, idéalement,
il faudrait enchainer avec un nouveau traitement...
"Olivier Miakinen" <om+ a écrit dans le message de news:4718daa0$
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
oops. Voilà ce que c'est que de faire deux choses à la fois ;-)
Mais en fait, cette solution ne me satisfait qu'a moitié; dans l'idéal, il faudrait que tant que la durée de traitement est inférieure à 5 mn, je garde la granularité de 5mn; mais si le traitement dépasse les 5 mn, idéalement, il faudrait enchainer avec un nouveau traitement...
-- -Stan
Nicolas George
"Stan" wrote in message <ffamsm$tmq$:
Mais en fait, cette solution ne me satisfait qu'a moitié; dans l'idéal, il faudrait que tant que la durée de traitement est inférieure à 5 mn, je garde la granularité de 5mn; mais si le traitement dépasse les 5 mn, idéalement, il faudrait enchainer avec un nouveau traitement...
Avec zsh + GNU date :
while true; do next=$[`date +%s`+300] something now=`date +%s` (( now < next )) && sleep $[next-now] done
On doit pouvoir remplacer les zshismes par des appels à expr.
"Stan" wrote in message <ffamsm$tmq$1@s1.news.oleane.net>:
Mais en fait, cette solution ne me satisfait qu'a moitié;
dans l'idéal, il faudrait que tant que la durée de traitement est
inférieure à 5 mn, je garde la granularité de 5mn;
mais si le traitement dépasse les 5 mn, idéalement,
il faudrait enchainer avec un nouveau traitement...
Avec zsh + GNU date :
while true; do
next=$[`date +%s`+300]
something
now=`date +%s`
(( now < next )) && sleep $[next-now]
done
On doit pouvoir remplacer les zshismes par des appels à expr.
Mais en fait, cette solution ne me satisfait qu'a moitié; dans l'idéal, il faudrait que tant que la durée de traitement est inférieure à 5 mn, je garde la granularité de 5mn; mais si le traitement dépasse les 5 mn, idéalement, il faudrait enchainer avec un nouveau traitement...
Avec zsh + GNU date :
while true; do next=$[`date +%s`+300] something now=`date +%s` (( now < next )) && sleep $[next-now] done
On doit pouvoir remplacer les zshismes par des appels à expr.
Olivier Miakinen
Avec zsh + GNU date :
while true; do next=$[`date +%s`+300] something now=`date +%s` (( now < next )) && sleep $[next-now] done
Joli.
Avec zsh + GNU date :
while true; do
next=$[`date +%s`+300]
something
now=`date +%s`
(( now < next )) && sleep $[next-now]
done
while true; do next=$[`date +%s`+300] something now=`date +%s` (( now < next )) && sleep $[next-now] done
Joli.
Thierry B.
--{ Stan a plopé ceci: }--
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 ?
Euh, à la gruik, la tache se relance d'elle-même avec "at" en calculant le temps qu'elle a mis à s'exécuter ?
-- Marrant, à l'époque on craignait que le forum soit inondé de trolls et maintenant on craint qu'on ne puisse plus y écrire depuis Wanadoo. --{ PL, dans fufe }--
--{ Stan a plopé ceci: }--
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 ?
Euh, à la gruik, la tache se relance d'elle-même avec "at"
en calculant le temps qu'elle a mis à s'exécuter ?
--
Marrant, à l'époque on craignait que le forum soit inondé de trolls et
maintenant on craint qu'on ne puisse plus y écrire depuis Wanadoo.
--{ PL, dans fufe }--
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 ?
Euh, à la gruik, la tache se relance d'elle-même avec "at" en calculant le temps qu'elle a mis à s'exécuter ?
-- Marrant, à l'époque on craignait que le forum soit inondé de trolls et maintenant on craint qu'on ne puisse plus y écrire depuis Wanadoo. --{ PL, dans fufe }--
Stephane Chazelas
2007-10-19, 16:54(+00), Nicolas George:
"Stan" wrote in message <ffamsm$tmq$:
Mais en fait, cette solution ne me satisfait qu'a moitié; dans l'idéal, il faudrait que tant que la durée de traitement est inférieure à 5 mn, je garde la granularité de 5mn; mais si le traitement dépasse les 5 mn, idéalement, il faudrait enchainer avec un nouveau traitement...
Avec zsh + GNU date :
while true; do next=$[`date +%s`+300] something now=`date +%s` (( now < next )) && sleep $[next-now] done
On doit pouvoir remplacer les zshismes par des appels à expr.
$[...] est un bashisme, ((...)) est un kshisme (et zsh supporte les deux). La syntaxe ($[...]) est deprecated. L'equivalent standard est $((...)) qui est POSIX.
Et bash comme zsh comme ksh ont $SECONDS (qui n'est pas POSIX):
while :; do SECONDS=0 something (( SECONDS > 300)) && sleep "$((300 - SECONDS))" done
Sinon, tout simplement:
while :; do { something >&3 3>&- | sleep 300; } 3>&1 done
Ou si something n'est censé rien produire sur sa sortie standard:
while :; do something > /dev/null | sleep 300 done
ou
while :; do sleep 300 | something done
si something n'est pas censé lire sur son entree standard.
-- Stéphane
2007-10-19, 16:54(+00), Nicolas George:
"Stan" wrote in message <ffamsm$tmq$1@s1.news.oleane.net>:
Mais en fait, cette solution ne me satisfait qu'a moitié;
dans l'idéal, il faudrait que tant que la durée de traitement est
inférieure à 5 mn, je garde la granularité de 5mn;
mais si le traitement dépasse les 5 mn, idéalement,
il faudrait enchainer avec un nouveau traitement...
Avec zsh + GNU date :
while true; do
next=$[`date +%s`+300]
something
now=`date +%s`
(( now < next )) && sleep $[next-now]
done
On doit pouvoir remplacer les zshismes par des appels à expr.
$[...] est un bashisme, ((...)) est un kshisme (et zsh supporte
les deux). La syntaxe ($[...]) est deprecated. L'equivalent
standard est $((...)) qui est POSIX.
Et bash comme zsh comme ksh ont $SECONDS (qui n'est pas POSIX):
while :; do
SECONDS=0
something
(( SECONDS > 300)) && sleep "$((300 - SECONDS))"
done
Sinon, tout simplement:
while :; do
{ something >&3 3>&- | sleep 300; } 3>&1
done
Ou si something n'est censé rien produire sur sa sortie standard:
while :; do
something > /dev/null | sleep 300
done
ou
while :; do
sleep 300 | something
done
si something n'est pas censé lire sur son entree standard.
Mais en fait, cette solution ne me satisfait qu'a moitié; dans l'idéal, il faudrait que tant que la durée de traitement est inférieure à 5 mn, je garde la granularité de 5mn; mais si le traitement dépasse les 5 mn, idéalement, il faudrait enchainer avec un nouveau traitement...
Avec zsh + GNU date :
while true; do next=$[`date +%s`+300] something now=`date +%s` (( now < next )) && sleep $[next-now] done
On doit pouvoir remplacer les zshismes par des appels à expr.
$[...] est un bashisme, ((...)) est un kshisme (et zsh supporte les deux). La syntaxe ($[...]) est deprecated. L'equivalent standard est $((...)) qui est POSIX.
Et bash comme zsh comme ksh ont $SECONDS (qui n'est pas POSIX):
while :; do SECONDS=0 something (( SECONDS > 300)) && sleep "$((300 - SECONDS))" done
Sinon, tout simplement:
while :; do { something >&3 3>&- | sleep 300; } 3>&1 done
Ou si something n'est censé rien produire sur sa sortie standard:
while :; do something > /dev/null | sleep 300 done
ou
while :; do sleep 300 | something done
si something n'est pas censé lire sur son entree standard.
-- Stéphane
Stan
"Thierry B." a écrit dans le message de news:
--{ Stan a plopé ceci: }--
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 ?
Euh, à la gruik, la tache se relance d'elle-même avec "at" en calculant le temps qu'elle a mis à s'exécuter ?
En effet, c'est une piste...
-- -Stan
"Thierry B." <tth@prout.stex> a écrit dans le message de
news:135nu4-fnc.ln1@prout.stex...
--{ Stan a plopé ceci: }--
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 ?
Euh, à la gruik, la tache se relance d'elle-même avec "at"
en calculant le temps qu'elle a mis à s'exécuter ?
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 ?
Euh, à la gruik, la tache se relance d'elle-même avec "at" en calculant le temps qu'elle a mis à s'exécuter ?
En effet, c'est une piste...
-- -Stan
Stan
"Stephane Chazelas" a écrit dans le message de news:
[...]
Ou si something n'est censé rien produire sur sa sortie standard:
while :; do something > /dev/null | sleep 300 done
ou
while :; do sleep 300 | something done
si something n'est pas censé lire sur son entree standard.
Merci à tous pour vos suggessions; je fais tester ça...
-- -Stan
"Stephane Chazelas" <cette.adresse@est.invalid> a écrit dans le message de
news:slrnfhjmln.6l4.stephane.chazelas@spam.is.invalid...
[...]
Ou si something n'est censé rien produire sur sa sortie standard:
while :; do
something > /dev/null | sleep 300
done
ou
while :; do
sleep 300 | something
done
si something n'est pas censé lire sur son entree standard.
Merci à tous pour vos suggessions;
je fais tester ça...