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 :

Lancer un traitement toutes les minutes


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif

    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2014
    Messages
    103
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2014
    Messages : 103
    Par défaut Lancer un traitement toutes les minutes
    Bonjour à tous,

    J'écris un script en Shell où se trouve une fonction traitement() devant être relancée toutes les minutes. Ma première idée fut la suivante :

    Code shell : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    while [1]
    do
      sleep(60)
      traitement()
    done

    Mais malheureusement, le traitement() peut prendre du temps et le délai d'une minute entre chaque lancement ne serait plus respecté. Avez-vous une idée sur ce problème s'il vous plaît ? Dois-je lancer traitement dans un thread séparé ou existe-t-il des solutions moins lourdes ?

    Merci pour vos réponses !

  2. #2
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 583
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 583
    Par défaut
    Bonjour, un chrontab qui lance ton script toutes les minutes ne fonctionne pas?

  3. #3
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Comme proposé par Kevin254kl, l'utilisation de la crontab est la bonne solution.

    Néanmoins, il faut faire attention aux choses suivantes : tous les chemins doivent être en absolu, et que se passe-t-il si deux exécutions, ou plus, sont lancées en même temps ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  4. #4
    Membre chevronné

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2006
    Messages
    247
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2006
    Messages : 247
    Billets dans le blog
    1
    Par défaut
    Tu peux en effet aussi lancer traitement en tache de fond avec un & apres son appel dans ta boucle
    mais avec la meme question : les fonctions traitement peuvent elles s'executer en parellele ?

  5. #5
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Pour ne pas lancer 2 traitements en parallèle, alors que le 1er n'est pas terminé, soit :
    - Quand ton script se lance, il écrit dans /var/run/monscript.pid (si le fichier existe déjà, on quitte)
    - Quand ton script se lance, il vérifie avec ps, qu'il n'est pas déjà en cours.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    le traitement() peut prendre du temps et le délai d'une minute entre chaque lancement ne serait plus respecté
    pour résumé :
    • soit tu laisses le traitement se terminer, et alors le délai d'une minute n'est pas respecté
    • soit tu ne lances pas de traitement concurrent en vérifiant qu'i n'était en cours d'exécution au préalable, et alors le délai d'une minute n'est pas respecté
    • soit «c'est bon ! on s'en fout !», et alors gare au bobo
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Par défaut
    Citation Envoyé par ggnore Voir le message
    Pour ne pas lancer 2 traitements en parallèle, alors que le 1er n'est pas terminé, soit :
    - Quand ton script se lance, il écrit dans /var/run/monscript.pid (si le fichier existe déjà, on quitte)
    - Quand ton script se lance, il vérifie avec ps, qu'il n'est pas déjà en cours.
    Bonjour,

    ayant eu la meme problematique il y a peu de temps ce sujet m'interesse.
    Je lance avec un crontab un jar qui realise un long traitement.
    J'ai verifie pendant l'execution de celui-ci je ne vois aucune mention de celui-ci ni avec la commande ps ni dans var/run/.
    Il y a t il une option speciale a utiliser?

    Merci

  8. #8
    Membre éclairé
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2007
    Messages
    497
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 497
    Par défaut
    Citation Envoyé par kevin254kl Voir le message
    Bonjour, un chrontab qui lance ton script toutes les minutes ne fonctionne pas?
    PS c'est crontab -e

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

Discussions similaires

  1. Comment lancer toutes les minutes ma commande via cron ?
    Par taffMan dans le forum Applications et environnements graphiques
    Réponses: 23
    Dernier message: 27/08/2007, 17h54
  2. Lancer un programme toutes les 5 minutes
    Par Empty_body dans le forum Autres Logiciels
    Réponses: 1
    Dernier message: 12/07/2006, 18h24
  3. Lancer une fct toutes les x minutes
    Par mambo dans le forum MFC
    Réponses: 8
    Dernier message: 21/06/2006, 23h16
  4. lancer une procedure toutes les minutes precisemment
    Par Alextk dans le forum SQL Procédural
    Réponses: 1
    Dernier message: 06/06/2006, 15h10
  5. Réponses: 2
    Dernier message: 17/01/2005, 14h46

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