• # ne pas le faire dans l'heure est 22

    Posté par . Évalué à 2.

    toutes les 10 minutes :
    */10 * * * * user tonscript

    toutes les heures sauf l'heure 22 ca devrait le faire avec une syntaxe de ce genre (à verifier avec le mode d'emploi
    * 0-21,23 * * * user tonscript

    ca te fait quand meme une donnée manquante, celle de 22h50

    • [^] # Re: ne pas le faire dans l'heure est 22

      Posté par . Évalué à 3.

      Si la première instruction du script qui est lancé toutes les dix minutes
      commence par vérifier que le fichier temoinCronContinue existe,
      et si ce fichier n'existe pas, le script s'arrête là.

      à 22:00, une autre tâche cron va créer ce fichier temoinCronContinue
      => ce qui va bloquer le script lancé toutes les 10 mn

      à 22:45, une autre tâche cron va supprimer le fichier temoinCronContinue
      => ce qui va permettre au script lancé toutes les 10 mn de continuer son travail.

      • [^] # Re: ne pas le faire dans l'heure est 22

        Posté par . Évalué à 2.

        dans ton cas tu geres donc 3 cron
        c'est un peu compliqué non ?

        la solution en bas est plus elegante.

        • [^] # Re: ne pas le faire dans l'heure est 22

          Posté par . Évalué à 2.

          la solution en bas est plus elegante.

          Pragmatique et simple peut-être (et encore, c'est buggogène si on merdoie sur les timezones etc), mais élégante, carrément pas. On pourrait imaginer que cron appelle toutes les 10 secondes la totalité des scripts qu'on y met et que chaque script vériie que ça n'est pas l'heure de se lancer…

          Personne n'a parlé de mettre toutes les heures sauf celles où il ne veut pas? Ça fait 139 lignes.

          • [^] # Re: ne pas le faire dans l'heure est 22

            Posté par . Évalué à 3.

            Personne n'a parlé de mettre toutes les heures sauf celles où il ne veut pas? Ça fait 139 lignes.

            139 lignes ? pour faire quoi ?
            ca tient en 6 lignes en ecrivant de la sorte

            if heure_courante < heure_debut && heure_courante > heure_fin
            then
                do_it
            else
                exit
            fi

            aller 8 lignes si on definit des variables pour les heures de debut et heure de fin (periode de non execution)

            10 ou 15 avec les conversions de date courante pour en extraire les heures et les minutes

            • [^] # Re: ne pas le faire dans l'heure est 22

              Posté par . Évalué à 1.

              139 lignes ? pour faire quoi ?

              J'imagine qu'il sous entendait écrire une ligne dans la crontab par lancement. Genre :

              0 0 * * * user tonscript
              0 1 * * * user tonscript
              ...
              50 21 * * * user tonscript
              50 22 * * * user tonscript
              ...
              50 23 * * * user tonscript

              Si je compte bien ça fait 24 * 6 - 5 = 139.

              • [^] # Re: ne pas le faire dans l'heure est 22

                Posté par . Évalué à 2.

                Merci, je croyais que c'était clair mais visiblement non :-)

                C'est une histoire de partage des tâches. Le script, une fois lancé, doit s'exécuter comme prévu. Le job de cron est de le lancer à certaines heures. Si tu délègues à ton script le choix de s'arrêter si ça n'est pas la bonne heure, alors tu empiètes sur le job de cron, tu crées tout un tas de bugs potentiels. Au final, tu vas rescripter un cron-like sans fonctionnalités et tout buggé. Alors non, je ne trouve pas ça élégant. C'est peut-être pragmatique, ça peut éventuellement marcher, mais c'est crade.

                139 lignes dans cron, ça n'est pas simple, ça n'est pas non plus élégant, mais ça a le mérite de ne pas empiéter sur les tâches des différents acteurs.

                • [^] # Re: ne pas le faire dans l'heure est 22

                  Posté par . Évalué à 4.

                  139 lignes dans cron, ça n'est pas simple, ça n'est pas non plus élégant, mais ça a le mérite de ne pas empiéter sur les tâches des différents acteurs.

                  surtout quand cron te permet de factoriser tout ca dans (j'ai pas testé)

                  */10 0-21,23 * * * user tonscript
                  50 22 * * *  user tonscript

                  ou si la premiere ligne ne passe pas :

                  */10 0-21 * * * user tonscript
                  50 22 * * *  user tonscript
                  */10 23 * * * user tonscript

                  ce qui est quand meme plus efficace que les 139 lignes

                • [^] # Re: ne pas le faire dans l'heure est 22

                  Posté par . Évalué à 1.

                  Tout à fait d'accord sur le principe, mais l'implémentation est mauvaise. Pourquoi tu tiens à l'écrire en 139 lignes alors qu'on peut l'écrire en 2 ?

                  • [^] # Re: ne pas le faire dans l'heure est 22

                    Posté par . Évalué à 2.

                    Parce que la réponse en 2 lignes n'était pas encore là lors de mon premier post? :-)

                    • [^] # Re: ne pas le faire dans l'heure est 22

                      Posté par . Évalué à 2.

                      Parce que la réponse en 2 lignes n'était pas encore là lors de mon premier post? :-)

                      solution en 2 ligne posté le 28/02 à 21h33
                      solution en 139 lignes posté le 01/03 à 09h23

                      donc non, ce ne doit pas etre pour ca ;)

                      • [^] # Re: ne pas le faire dans l'heure est 22

                        Posté par . Évalué à 2.

                        Euh, tes deux lignes du 28/02 ne fonctionnent pas (ou alors je n'ai pas compris). J'ai l'impression que tu donnes une piste, mais ça n'est pas une solution. Ce qui fonctionne c'est la solution en deux lignes qui est en dessous.

                        • [^] # Re: ne pas le faire dans l'heure est 22

                          Posté par . Évalué à 3.

                          J'ai l'impression que tu donnes une piste, mais ça n'est pas une solution

                          apprendre à pecher, ou donner du poisson…
                          je choisis de donner des pistes, plutot que la solution.

      • [^] # Re: ne pas le faire dans l'heure est 22

        Posté par . Évalué à 3.

        Surtout, si pour une raison ou pour une autre, ta machine est arrêtée entre 22h et 22h45 et ne redémarre qu'après 22h45, tu perds toute la journée suivante.

  • # Dans le script

    Posté par (page perso) . Évalué à 10.

    Mettre une détection de l'heure dans le script et faire un exit si on est entre 2200 et 2245 ?

    La gelée de coings est une chose à ne pas avaler de travers.

    • [^] # Re: Dans le script

      Posté par . Évalué à 1.

      Effectivement, c'est bien plus simple de faire un exit dans le script qui va lui même trouver l'heure.

    • [^] # Re: Dans le script

      Posté par . Évalué à 3.

      3 lignes de cron :
      - la première, créé un fichier à 22h:
      - la seconde l'efface à la fin (22h45)
      - la 3ième effectue la tache, en l’absence du fichier, lancée toutes les 10mn.

  • # 2 lignes suffisent

    Posté par . Évalué à 6.

    */10 0-21,23 * * * user tonscript
    50 22 * * * user tonscript
    • [^] # Re: 2 lignes suffisent

      Posté par (page perso) . Évalué à 7.

      Pour chipoter, tout le monde a jusqu'ici supposé que la demande concernait toutes les 10 min à partir de 0. En fait, sur la tranche 22h-23H :

      • si on commence entre xx:00 et xx:05, on va avoir un seule occurrence à 22h5[0-5]
      • si on commence entre xx:06 et xx:09, on va avoir deux occurrences à 22h4[6-9] et 22h5[6-9]

      En général, on s'en fiche, mais ça peut valoir le coup de faire préciser la demande :).

      • [^] # Re: 2 lignes suffisent

        Posté par . Évalué à 1.

        Effectivement. Si l'écart entre les lancement doit être homogène on peut faire ceci :

        0,10,20,30,40,50 0-21,23 * * * user tonscript
        50 22 * * * user tonscript
  • # changer de moteur de planification

    Posté par . Évalué à 2.

    si avec tous les exemples ci-dessus tu n'y arrive pas,
    y a aussi la solution de changer de moteur de planification.

    ex : nagios/naemon qui n'est pas prevu pour on est d'accord, peut executer un script toute les X minutes (Check_Interval)
    il peut avoir des periodes pendant lesquels les checks vont s'executer
    avec des trous dedans, ou des options "sauf"

    tous les jours de la semaine
    sauf mercredi 23h-2330

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.