Bonjour à tous
Comment pouvoir lancer une commande sous Debian chaque seconde? par exemple la commande : free -m
Merci
Bonjour à tous
Comment pouvoir lancer une commande sous Debian chaque seconde? par exemple la commande : free -m
Merci
Yep !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while : do ta_commande sleep 1 done
Code : Sélectionner tout - Visualiser dans une fenêtre à part watch -n 1 -- free -m
Bonjour
Merci Jipété et N_BaH pour vos réponses.
A mon avis ce script prend plus qu'une seconde pour chaque itération puisqu'il y a :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while : do ta_commande sleep 1 done
1- la condition après while ( : ) prend du temps t1
2- la commande (ta_commande) prend du temps t2
3- la commande sleep 1 prend 1 seconde.
La somme donc est : t1 + t2 + 1sec.
La réponse de N_BaH est plus correcte :
Mais si j'ai un script contenant une boucle, et je voudrais seulement que "ma_commande" s'exécute chaque seconde, par exemple :
Code : Sélectionner tout - Visualiser dans une fenêtre à part watch -n 1 -- free -m
L'instruction ma _commande, dans le script, à la deuxième itération s'exécute après 1 seconde que son exécution à la première itération, j'espère que ma demande est claire.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while i<n do ma_commande i++ done
Merci
si tu veux relancer la commande toutes les secondes, qu'elle soit terminée ou non, il faut la faire passer en arrière-plan.
C'est surement que les itérations de la boucle while s'exécutent en moins qu'une seconde, ma_commande ne doit pas être exécutée si une seconde n'est pas encore écoulée depuis son exécution à l'itération précédente.
Comment ça? peux-tu mieux expliquer?il faut la faire passer en arrière-plan
Merci
Puisque tu veux une extrême précision en ce qui concerne l'exécution de ta commande, je te recommande d'être également très précis sur ce que tu veux faire, et de détailler exactement le comportement que tu souhaite voir adopter par ton script.
- la commande dure-t-elle toujours le même temps ?
- que faut-il faire si elle dure moins d'une seconde ?
- si elle dure plus d'une seconde ?
- ...
supposons que nous avons le script suivant :
et que :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 while i < n do ma_commande i++ done
i < n prend 0,1 seconde
ma_commande prend 0,3 seconde
i++ prend 0,2 seconde
première itération : 0,1 + 0,3 + 0,2
deuxième itération : 0,1 + 0,4 + 0,3 + 0,2 (0,4 seconde d'attente pour que le délai soit égale à 1 seconde avant le lancement de ma_commande)
troisième itération : 0,1 + 0,4 + 0,3 + 0,2
....
...
Merci
je serai curieux que quelqu'un apporte solution
les éléments d'une boucle ne sont pas quantifiables, et, mesurer et calculer ajoute du temps qu'il faudra aussi mesurer et calculer, jusqu'à la fin des temps
tu n'as pas répondu : et si la commande dure plus d'une seconde ?
- au fait, pourquoi une telle exigence?
ma_commande ne dure pas plus d'une seconde, on a pas cette exigence.
" La précision "au fait, pourquoi une telle exigence?
Bonjour,
Une autre question, pour plus de précision, est-ce sur un temps utilisateur où sur un temps global ?
Car sur un temps utilisateur, cela pourrait éventuellement être possible (enfin, je pense mais j'ai pas la solution) mais sur un temps global, je ne vois pas comment faire puisqu'on ne controle pas la charge de la machine.
Sinon, une méthode pour commencer un sleep et pendant ce temps on fait une boucle et qui attendra que le temps soit fini avant de relancer un sleep (en fait on ne fait que décaler l'attente):
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 sleep 1 & while true do fg sleep 1 & # ici la commande done
Tu veux dire par "un temps utilisateur" : le temps de processus?
et par " un temps global " : le temps réel?
On cherche toujours l'exactitude et la précision : en fait, le temps utilisateur n'est pas parfaitement précis.
Oui.
La méthode que je te fourni devrais répondre à ton problème en considérant les détails suivants:
-Prendre en compte dans tes temps, le démarrage de la commande sleep et juste le démarrage puisque celle-ci rends la main de suite.
-Pour fg, en principe, ne pas le prendre en compte, puisqu'il sert à attendre la fin du sleep. C'est elle qui fait la synchro, donc, comme pour de l'animation, tu es obligé de garder un gap de temps (le plus petit possible mais obligatoire) ou il n'y a rien à faire.
Donc, ici, la seule imprécision que tu auras sera celle de ton système (schedule,in/out,sys).
Pourquoi pas la crontab ?
Mais dans ce cas là, tu ne pourras pas l’arrêter facilement![]()
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager