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 :

Crontab une semaine sur deux / deux fois par mois


Sujet :

Shell et commandes GNU

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut Crontab une semaine sur deux / deux fois par mois
    Bonjour,
    J'ai besoin d'une petite aide,
    Je dois mettre en place une sauvegarde une semaine sur deux, chaque vendredi à 00h30 soit deux fois par mois.
    J'ai ajouté dans ma crontab les lignes suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    30 00 1-10 * 5 /opt/scripts/sauvegarde/sauvegarde.sh 1 >> /opt/xxxxx/trac_crontab.log
    30 00 12-23 * 5 /opt/scripts/sauvegarde/sauvegarde.sh 1 >> /opt/xxxxx/trac_crontab.log
    Sauf erreur, le vendredi entre l'intervalle le script devrait s'exécuter.
    Je pense que ça devrait fonctionner, mais dans le doute j'aimerais obtenir une précision.
    Existe t-il une meilleur méthode pour réaliser le lancement de ce script ?

    Merci
    Yohan

  2. #2
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour,

    Tu peux tester ta définition de crontab sur: https://crontab.guru

    EDIT: D'ailleurs, tu peux représenter tes 2 lignes en une seule:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    30 00 1-10,12-23 * 5 /opt/scripts/sauvegarde/sauvegarde.sh 1 >> /opt/xxxxx/trac_crontab.log
    Cordialement.

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

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour

    Vendredi à minuit et demi ? Est-ce que c'est pas déjà samedi ?

    Si le but est de faire une sauvegarde automatique après 2 semaines de travail, j'imagine que c'est plutôt samedi.
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  4. #4
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    Merci,
    J'ai réalisé la modification, mais hier (pas vendredi le script s'est exécuté).
    Du coup, j'ai tout réécris à la main.
    Y a t'il un moyen de réinitialiser la crontab à moins que mon soucis vienne d'un autre coté.
    J'ai peut-être loupé quelques chose.

    Dans la log de la cron, il est là
    May 15 00:30:01 pc01 crond[3651]: (root) CMD (/opt/scripts/sauvegarde/sauvegarde.sh 1 >> /opt/scripts/sauvegarde/log/trac_crontab.log)

    Oui, c'est tout les vendredi a 00h30.

    Merci

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Tu aurais été sur le lien donné pour tester ta définition de crontab, tu aurais vu que celle-ci ne faisait pas ce que tu voulais.

    Les jours de la semaine ne sont pas prioritaires aux jours du mois et vice-versa.

    A priori, il n'y a pas de solution simple...
    Cordialement.

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    13
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 13
    Points : 9
    Points
    9
    Par défaut
    Bonjour,

    Merci,

    Et concrètement, comment faire pour planifier cette planification ?

    Pourriez-vous m'aider svp ?

  7. #7
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Une solution possible:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    30 00 * * 5 [ `date "+scale=0; (%s/86400)%14" | bc -l` -eq 0 ] && /opt/scripts/sauvegarde/sauvegarde.sh 1 >> /opt/xxxxx/trac_crontab.log
    Ici la crontab lance le job tous les vendredi mais ton script ne sera lancé que si le calcul du nombre de jour depuis le 1er janvier 1970 (un jeudi) modulo 14 est égal à 0.
    Pour un vendredi, on ne peut avoir que 0 ou 7, exemple du calcul sur les vendredi d'avril,mai et juin 2018:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    for i in 04-06 04-13 04-20 04-27 05-04 05-11 05-18 05-25 06-01 06-08 06-15 06-22 06-29; do date "+scale=0; (%s/86400)%14" --date="2018-${i}" | bc -l; done
    0
    7
    0
    7
    0
    7
    0
    7
    0
    7
    0
    7
    0
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    Citation Envoyé par disedorgue
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    `date "+scale=0; (%s/86400)%14" | bc -l`
    oh, quelle bonne idée !
    mais si tu effectues des calculs sur des entiers, bc est-il bien nécessaire ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (( $(date +'(%s/86400)%14') )) || /opt/scripts/sauvegarde/sauvegarde.sh 1 >> /opt/xxxxx/trac_crontab.log
    non ?
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  9. #9
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Oui, mais bon, avec la crontab, je suis timide, faut tester
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    grr!
    en effet, crontab utilise /bin/sh, ce type de test risque de ne pas être correctement évaluer.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test $(($(date +'(%s/86400)%14'))) -eq 0 && ...
    bc ne me semble toujours pas nécessaire.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  11. #11
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    A ma connaissance test ne fait pas de calcul et date non plus, d'où bc
    Cordialement.

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 550
    Points : 19 383
    Points
    19 383
    Par défaut
    ah, mais, heu !
    il faut faire une évaluation arithmétique (ça, ça marche en shell POSIX), j'avais oublié de l'ajouter.
    c'est fait.

    en shell strictement POSIX,
    (( ... )) ne fonctionne pas : n'est pas correctement évalué comme un test , mais
    $(( .. )) fonctionne : l'évaluation arithmétiquement est correctement effectuée, mais cela requiert un test explicite.
    .
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  13. #13
    Membre éclairé Avatar de Lekno
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2010
    Messages
    883
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Septembre 2010
    Messages : 883
    Points : 761
    Points
    761
    Par défaut
    fais un script bash, dans celui-ci tu créer un fichier contenant la date du dernier backup, tu mets ton cron simple tout les jours. Lors du cron le script compare la date stocké dans le fichier avec la courante si > 15 jours alors tu fais tes manip si non rien ca me semble plus simple

Discussions similaires

  1. Réponses: 47
    Dernier message: 01/10/2015, 16h21
  2. lu tous les jours mais exécuté une seule fois par mois
    Par sianto dans le forum Scripts/Batch
    Réponses: 13
    Dernier message: 17/11/2008, 09h08
  3. Crontab planification une semaine sur deux
    Par Max dans le forum Administration système
    Réponses: 4
    Dernier message: 29/01/2008, 12h10
  4. Réponses: 19
    Dernier message: 12/04/2007, 15h11
  5. Réponses: 1
    Dernier message: 15/09/2006, 14h04

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