IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Exécution périodique d'une commande


Sujet :

Shell et commandes GNU

  1. #1
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 20
    Points : 11
    Points
    11
    Par défaut Exécution périodique d'une commande
    Bonjour à tous

    Comment pouvoir lancer une commande sous Debian chaque seconde? par exemple la commande : free -m

    Merci

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 847
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 847
    Points : 15 264
    Points
    15 264
    Par défaut
    Yep !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while :
    do
        ta_commande
        sleep 1
    done

  3. #3
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 578
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 442
    Points
    19 442

  4. #4
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Bonjour

    Merci Jipété et N_BaH pour vos réponses.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     while :
    do
        ta_commande
        sleep 1
    done
    A mon avis ce script prend plus qu'une seconde pour chaque itération puisqu'il y a :
    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
    1
    2
    3
    4
    5
     while i<n
    do
        ma_commande
        i++
    done
    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.

    Merci

  5. #5
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 578
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 442
    Points
    19 442
    Par défaut
    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.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    si tu veux relancer la commande toutes les secondes, qu'elle soit terminée ou non,
    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.

    il faut la faire passer en arrière-plan
    Comment ça? peux-tu mieux expliquer?

    Merci

  7. #7
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 578
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 442
    Points
    19 442
    Par défaut
    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 ?
    • ...

  8. #8
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    supposons que nous avons le script suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while i < n
    do
    ma_commande
    i++
    done
    et que :
    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

  9. #9
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 578
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 578
    Points : 19 442
    Points
    19 442
    Par défaut
    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?

  10. #10
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    ma_commande ne dure pas plus d'une seconde, on a pas cette exigence.

    au fait, pourquoi une telle exigence?
    " La précision "

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 299
    Points : 12 783
    Points
    12 783
    Par défaut
    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

  12. #12
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    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.

  13. #13
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 299
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 299
    Points : 12 783
    Points
    12 783
    Par défaut
    Citation Envoyé par n_zerrouki Voir le message
    Tu veux dire par "un temps utilisateur" : le temps de processus?
    et par " un temps global " : le temps réel?
    Oui.

    Citation Envoyé par n_zerrouki Voir le message
    On cherche toujours l'exactitude et la précision : en fait, le temps utilisateur n'est pas parfaitement précis.
    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).

  14. #14
    Membre à l'essai
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2012
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2012
    Messages : 20
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    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).
    MERCI

  15. #15
    Invité
    Invité(e)
    Par défaut
    Pourquoi pas la crontab ?
    Mais dans ce cas là, tu ne pourras pas l’arrêter facilement

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Peut-on exécuter/invoquer/appeler une commande readline non liée du bash?
    Par jack-ft dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 20/10/2013, 18h29
  2. Exécution segmenter d'une commande
    Par sefesfe dans le forum Général Python
    Réponses: 2
    Dernier message: 21/06/2012, 16h37
  3. Exécution périodique d'une macro
    Par PPz78 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/01/2009, 09h17
  4. Réponses: 7
    Dernier message: 05/10/2005, 18h06
  5. Exécuter une commande linux.
    Par casafa dans le forum Linux
    Réponses: 4
    Dernier message: 20/07/2005, 23h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo