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

Administration système Discussion :

Cron toutes les 45 minutes (pas aussi simple qu'au 1er abord)


Sujet :

Administration système

  1. #1
    Membre éclairé Avatar de Beanux
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2009
    Messages : 249
    Points : 744
    Points
    744
    Par défaut Cron toutes les 45 minutes (pas aussi simple qu'au 1er abord)
    Salut,

    J'ai une question qui peut sembler bête, mais qui me pose problème, comment faire un cron toutes les 45 minutes. On peut étendre la question à un cron qui ne serait pas multiple de 60 (ou 24 ou 7 selon la régularité voulu).

    Il y a un piège, parce que */45, c’est le modulo des minutes, donc on aura un déclenchement a 00:00,00:45 puis 01:00 et 01:45.
    Alors qu'on souhaite: 00:00,00:45,01:30,02:15,03:00, etc.


    si possible j'aurais aimé le faire en une seule ligne plutôt qu'en trois (ou de passer par du code pour ça):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    0,45	*/3	*	*	*
    30	1-23/3	*	*	*
    15	2-23/3	*	*	*

  2. #2
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Salut,

    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  3. #3
    Membre éclairé Avatar de Beanux
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2009
    Messages : 249
    Points : 744
    Points
    744
    Par défaut
    Malheureusement, ça s’exécutera toutes les heures à 45 minutes et pas toute sles 45 minutes, donc ça ne marche pas non plus.

  4. #4
    Rédacteur/Modérateur
    Avatar de Winnt
    Homme Profil pro
    budget et contrôle de gestion
    Inscrit en
    Décembre 2006
    Messages
    1 978
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : France

    Informations professionnelles :
    Activité : budget et contrôle de gestion
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Décembre 2006
    Messages : 1 978
    Points : 4 130
    Points
    4 130
    Par défaut
    Salut,

    Essaye ceci alors :
    Winnt
    Merci de lire les règles du forum LaTeX et Qu'est ce qu'un ECM ?.
    N'hésitez pas à parcourir la FAQ la réponse y est peut-être déjà.
    Pensez au bouton si votre problème est résolu.


    C'est en Linuxant qu'on devient .... geek
    Et c'est en LateXant qu'on devient flemmard
    Mon blog tout neuf.
    Articles : présentation de la distribution Gentoo, Les index sous LaTeX et leur personnalisation.

  5. #5
    Membre éclairé Avatar de Beanux
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2009
    Messages : 249
    Points : 744
    Points
    744
    Par défaut
    Cela ne marche pas, et j'avais détaillé pourquoi dans le post principal

  6. #6
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 242
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 242
    Points : 13 457
    Points
    13 457
    Par défaut
    Bonjour,

    Je vois 2 solutions:
    • Faire la liste des heures et écrire autant de lignes dans crontab. Ce n'est pas la mer à boire.
    • Insérer la ligne suivante:
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1   *    *    *    *   test $(( ($(date -d"now" +%s) - $( date -d"now 00:00" +%s) )%(60*45)/60 )) -eq 0 && mon_script.sh


    mon_script.sh étant la <tâche>, bien sûr.


    [edit]Je suis prêt à parier que tu n'as pas pensé aux changements d'horaires dans ta conception.[/edit]
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  7. #7
    Membre éclairé Avatar de Beanux
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2009
    Messages : 249
    Points : 744
    Points
    744
    Par défaut
    Oui, c'est ce que j'ai fait, mais c'est pour une question de lisibilité et de maintenance.
    J'ai même simplifié ça en factorisant ça toutes les 3 heures (3 lignes au lieu de 32).

    Je vais mettre en place ce cron, mais je ne vais pas assurer la maintenance du système derrière (et je n'ai foutrement aucune idée de qui le fera).

    J’espérais une arcane caché dans cron, mais c'est impossible il semblerait =)

    Merci

    edit: non je n'y ai pas pensé, et c'est en effet un soucis.

  8. #8
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Voici une solution où l'intervalle est préservé aux changements de jour et d'heure quel que soit l'intervalle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    *    *    *    *    *   test $((($(date +\%s)/60)\%45)) = 0 && /path_to/mon_script.sh
    ɹǝsn *sıɹɐlos*

  9. #9
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 368
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 368
    Points : 23 620
    Points
    23 620
    Par défaut
    Une petite recherche sur Internet montre que la plupart des gens ont le même souci.

    Le principal obstacle à une telle fonctionnalité tient au fait qu'il faut un point de repère : si le daemon est arrêté puis relancé, voire même si c'est la machine tout entière qui refait un cycle, il est impossible de savoir a priori quand a eu lieu la dernière exécution. Il est donc nécessaire de définir un motif par rapport à l'heure courante. Effectivement, cron pourrait fournir un moyen de spécifier un laps de répétition par rapport à ce point de référence mais cela impliquerait que la largeur de l'intervalle soit multiple de ce laps : si on souhaite répéter une tâche toutes les sept minutes à partir du début de l'heure, par exemple, on n'aurait que quatre minutes entre 00h56 et l'heure suivante.

  10. #10
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par Obsidian Voir le message
    Le principal obstacle à une telle fonctionnalité tient au fait qu'il faut un point de repère : si le daemon est arrêté puis relancé, voire même si c'est la machine tout entière qui refait un cycle, il est impossible de savoir a priori quand a eu lieu la dernière exécution.
    Je ne comprends pas de quel daemon tu parles. Est-ce que ma suggestion ne réponds pas à tes remarques ?
    ɹǝsn *sıɹɐlos*

  11. #11
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 149
    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 149
    Points : 28 116
    Points
    28 116
    Par défaut
    Pour moi la solution de jiliagre est bonne.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  12. #12
    Membre éclairé Avatar de Beanux
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2009
    Messages : 249
    Points : 744
    Points
    744
    Par défaut
    Le probleme soulevé est que cron log chaque fois qu'il se lance.
    Or dans la solution proposé, il va se lancer toutes les minutes, executer le test et lancer réellement ou non, la commande qui suit.

    Avec une solution externe a cron comme proposé), on ne peut pas savoir (ou alors construire un système de log pour ça) si le test a lancé la commande ou non. On peut juste déduire si elle a été lancé, pas en avoir la preuve.

  13. #13
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Citation Envoyé par Beanux Voir le message
    Le probleme soulevé est que cron log chaque fois qu'il se lance.
    Ou pas, ça dépend de sa configuration.

    Or dans la solution proposé, il va se lancer toutes les minutes, executer le test et lancer réellement ou non, la commande qui suit.

    Avec une solution externe a cron comme proposé), on ne peut pas savoir (ou alors construire un système de log pour ça) si le test a lancé la commande ou non. On peut juste déduire si elle a été lancé, pas en avoir la preuve.
    Si cron est actif et qu'il n'y a pas de bug dans ma suggestion, on peut être sûr que cron va lancer la commande toutes les N minutes (ou au moins essayer de le faire). Si la commande échoue et affiche quelque chose sur stderr, un mail doit être envoyé à l'utilisateur si un MTA est correctement installé.
    ɹǝsn *sıɹɐlos*

  14. #14
    Membre éclairé Avatar de Beanux
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2009
    Messages : 249
    Points : 744
    Points
    744
    Par défaut
    Merci.
    Je vais adapter légèrement ta solution afin d'éviter de surcharger les log du cron (oui la config sur le système est de log chaque cron lancé, afin d'en garder une trace):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    */15    *    *    *    *   test $((($(date +\%s)/60)\%45)) = 0 && /path_to/mon_script.sh
    Ps, je pense qu'Obsidian résumait le cœur du problème, mais ne critiquait pas la réponse que tu apportais. Mais pour la discussions, si un filtre cron pouvait se baser sur l'Epoch time cela devrait solutionner le soucis.

  15. #15
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Points : 7 882
    Points
    7 882
    Par défaut
    Ton optimisation permet bien de réduire le nombre de logs d'exécution mais uniquement si le nombre de minutes est un diviseur d'une journée complète comme ici 45 minutes, pas pour un intervalle de temps arbitraire (ex: toutes les 50 minutes).
    ɹǝsn *sıɹɐlos*

  16. #16
    Membre éclairé Avatar de Beanux
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Octobre 2009
    Messages
    249
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Octobre 2009
    Messages : 249
    Points : 744
    Points
    744
    Par défaut
    En effet, mais dans le cas de 50, un */10 passera.
    Il faut juste trouver le PGCD entre 60 et le la récurrence voulu.

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

Discussions similaires

  1. Réponses: 8
    Dernier message: 15/06/2012, 14h18
  2. sauvegarde toute les 2 minutes si pas de modifications
    Par ickis69 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 25/03/2009, 13h00
  3. Reboot PC sous W2K toutes les 6 minutes
    Par lio33 dans le forum Windows Serveur
    Réponses: 10
    Dernier message: 12/10/2005, 14h37
  4. Planification de tache toutes les 30 minutes
    Par gigiland dans le forum Windows
    Réponses: 4
    Dernier message: 21/09/2005, 14h36
  5. exécution toutes les 15 minutes
    Par devmat dans le forum C++
    Réponses: 5
    Dernier message: 18/09/2005, 20h07

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