Crontab

Résolu
xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   -  
xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

Je voudrais recevoir une alerte via crontab

* Tous les 2em mardis de chaque mois.
* Tous les dernier mardis de chaque mois.

Personnellement je n'ai pas trouvé la bonne formule dans crontab

# Tous les 2em mardis de chaque mois à 00H00
00 00 2-7 * 2 bash /home/serveur/scripts/crontab/envoi-mail-assoc-deuxieme-mardis.sh

# Tous les dernier mardis de chaque mois à 00H00
Je n'arrive pas a trouvé la formule

Merci.

19 réponses

  1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
     
    Salut,

    # Tous les dernier mardis de chaque mois à 00H00
    Y'a pas ça en magasin ;-(
    0
  2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    hello
    dans un script à exécuter tous les jours, plutot qu'une ligne cron
    m2 c'est le 2ème mardi du mois, md le dernier
    read m2 md <<<$(ncal | awk '/^Tu/ {print $3, $NF}')
    et on teste avec $(date +%d)
    0
  3. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonjour,

    Avec :
    read m2 md <<<$(ncal | awk '/^Tu/ {print $3, $NF}')
    echo "Le dernier mardi du mois de $(date +%B) est le : $(date +%d)"

    Résultat :
    serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-dernier-mardis.sh
    Le dernier mardi du mois de juin est le : 24
    serveur@debian:~$

    Ok mais comment dire à mail d'envoyer l'email quand ce sera le 24 du mois par exemple ?

    message="Le corps du message"
    sujet="Le sujet du message"
    destinataire="mail.mail@fai.fr"
    echo "$message" | mail -v -s "$sujet" $fichier $destinataire

    Merci.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      mais comment dire à mail d'envoyer l'email quand ce sera le 24 du mois par exemple ?
      En testant en début de script si la date du jour correspond à la valeur renvoyée par la commande de dubcek ;-\
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      en exécutant le script tous les jours et en testant si date +%d == $m2 alors deuxième mardi ou == $md dernier mardi
      0
  4. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Re,

    Y a un problème ?
    date: opérande supplémentaire « == »
    Saisissez « date --help » pour plus d'informations.

    ncal est en français chez moi
    serveur@debian:~$ ncal                                                                                                                                                                                            
    Juin 2014
    lu 2 9 16 23 30
    ma 3 10 17 24
    me 4 11 18 25
    je 5 12 19 26
    ve 6 13 20 27
    sa 7 14 21 28
    di 1 8 15 22 29 serveur@debian:~$


    Test :
    serveur@debian:~$ ncal | awk '/^ma/ {print $3, $NF}'
    10 24
    serveur@debian:~$


    Avec :
    read m2 md <<<$(ncal | awk '/^ma/ {print $3, $NF}')
    echo "Le 2em mardi du mois de $(date +%B) est : $m2" #$(date +%d)"
    echo "Le dernier mardi du mois de $(date +%B) est : $md" #$(date +%d)"

    echo
    echo "2em mardis de chaque mois : date +%d == $m2"
    date +%d == $m2
    echo
    echo "Dernier mardis de chaque mois : date +%d == $md"
    date +%d == $md


    Résultat :
    serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
    Le 2em mardi du mois de juin est : 10
    Le dernier mardi du mois de juin est : 24

    2em mardis de chaque mois : date +%d == 10
    date: opérande supplémentaire « == »
    Saisissez « date --help » pour plus d'informations.

    Dernier mardis de chaque mois : date +%d == 24
    date: opérande supplémentaire « == »
    Saisissez « date --help » pour plus d'informations.
    serveur@debian:~$

    Merci.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    affiche le résultat de :
    ncal
    entre balises code
    0
  7. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Re,

    Voilà le résultat :
    serveur@debian:~$ ncal
    Juin 2014
    lu 2 9 16 23 30
    ma 3 10 17 24
    me 4 11 18 25
    je 5 12 19 26
    ve 6 13 20 27
    sa 7 14 21 28
    di 1 8 15 22 29
    serveur@debian:~$

    serveur@debian:~$ date
    mardi 24 juin 2014, 14:27:43 (UTC+0200)
    serveur@debian:~$

    serveur@debian:~$ date +%d == 24
    date: opérande supplémentaire « == »
    Saisissez « date --help » pour plus d'informations.
    serveur@debian:~$

    Merci.
    0
  8. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    à exécuter chaque jour
    #!/bin/bash
    read M2 MD <<<$(ncal | awk '/^ma/ {print $3, $NF}'); J=$(date +%d)
    if [ $J -eq $M2 ]; then
    echo 2eme mardi
    else
    if [ $J -eq $MD ]; then
    echo dernier mardi
    else
    echo journée banale et affligeante
    fi
    fi
    0
  9. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Re,

    Heu y a une erreur !
    /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh: ligne 26 : [: 24 : nombre entier attendu comme expression

    Avec :
    read M2 MD <<<$(ncal | awk '/^ma/ {print $3, $NF}'); J=$(date +%d)
    if [ $J -eq $M2 ]; then
    echo 2eme mardi
    else
    if [ $J -eq $MD ]; then
    echo dernier mardi
    else
    echo journée banale et affligeante
    fi
    fi

    Le résultat est :
    serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
    /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh: ligne 26 : [: 24 : nombre entier attendu comme expression
    journée banale et affligeante
    serveur@debian:~$

    Merci.
    0
  10. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    affiche les lignes numérotées pour voir la 26
    chez moi
    $ head -13  f1
    #!/bin/bash
    read M2 MD <<<$(ncal | awk '/^Tu/ {print $3, $NF}'); J=$(date +%d)
    if [ $J -eq $M2 ]; then
    echo 2eme mardi
    else
    if [ $J -eq $MD ]; then
    echo dernier mardi
    else
    echo journée banale et affligeante
    fi
    fi
    $ ./f1
    dernier mardi
    0
  11. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    ou essayer avec case
    read M2 MD <<<$(ncal | awk '/^ma/ {print $3, $NF}'); J=$(date +%d)
    case $J in
    $M2) echo 2eme mardi ;;
    $MD) echo dernier mardi ;;
    *) echo journée banale et affligeante ;;
    esac
    0
  12. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Re,

    Les cases doivent être écrit en dur il me semble.
    mais ça marche pas nom plus.

    Avec :
    read M2 MD <<<$(ncal | awk '/^ma/ {print $3, $NF}'); J=$(date +%d)
    echo "J - Nous somme le : $J"
    echo "M2 - Le 2em mardi de ce mois est le : $M2"
    echo "MD - Le dernier mardi de ce mois est le : $MD"
    echo

    case $J in
    $M2) echo 2eme mardi ;;
    $MD) echo dernier mardi ;;
    *) echo journée banale et affligeante ;;
    esac

    Résultat :
    serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
    J - Nous somme le 24
    M2 - Le 2em mardi de ce mois est le : 10
    MD - Le dernier mardi de ce mois est le : 24

    journée banale et affligeante
    serveur@debian:~$


    Je pense que la meilleure solution était votre avant dernier code.
    Mais qu'est-ce qui fait qui nous différents si le résultat du code ?

    Merci.
    0
  13. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    pour l'avant dernier code, montre les lignes numérotées, pour voir la 26
    quel système ?
    si je change ^ma par ^We (je laisse mardi dans les echo) ca marche avec le code précédent, on est bien le dernier We du mois
    $ ./f1
    J - Nous somme le : 25
    M2 - Le 2em mardi de ce mois est le : 11
    MD - Le dernier mardi de ce mois est le : 25

    dernier mardi
    0
  14. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    essayer
    #!/bin/bash
    read M2 MD <<<$(ncal | awk '/^ma/ {print $3, $NF}'); J=$(date +%d)
    if [ $J -eq $M2 ]; then
    echo 2eme mardi
    elif [ $J -eq $MD ]; then
    echo dernier mardi
    else
    echo journée banale et affligeante
    fi
    0
  15. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Re,

    Pour l'instant il me répond :
    serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
    J - Nous somme le : 25
    M2 - Le 2em mardi de ce mois est le : 10
    MD - Le dernier mardi de ce mois est le : 24

    journée banale et affligeante
    serveur@debian:~$
    Je n'arrive pas a mettre la date au 24/06/2014 pour faire un test .

    Date actuel :
    serveur@debian:~$ date
    mercredi 25 juin 2014, 17:07:37 (UTC+0200)
    serveur@debian:~$

    Impossible de modifier la date :
    root@debian:/home/serveur# date -s "24/06/2014"
    date: date non valide « 24/06/2014 »
    root@debian:/home/serveur#

    Merci.
    0
  16. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    pour la date essayer: date -s "6/24/2014"
    pour tester changer le jour dans le awk (^ma) plutot que changer la date du système, on est à la fin du mois, dernier jeudi
    0
  17. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    reconnait le jour:
    #!/bin/bash
    s=(lundi mardi mercredi jeudi vendredi samedi dimanche)
    #wd=(Mo Tu We Th Fr Sa Su)
    wd=(lu ma me je ve sa di)
    j=${s[$(date +%u)-1]}; d=${wd[$(date +%u)-1]} ;
    read M2 MD <<<$(ncal | awk -v d=$d '$1 ~ d {print $3, $NF}'); J=$(date +%d)
    if [ $J -eq $M2 ]; then
    echo 2eme $j
    elif [ $J -eq $MD ]; then
    echo dernier $j
    else
    echo journée banale et affligeante
    fi
    0
  18. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonjour,

    Mon os est : Kubuntu 12.04.4 LTS.
    Je n'y avais pas pensé de changer dans le awk (^ma) plutot que de changer la date du système.

    Avec :
    serveur@debian:~$ cat -n /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
    1 #!/bin/bash
    2
    3
    4
    5
    6 read M2 MD <<<$(ncal | awk '/^je/ {print $3, $NF}'); J=$(date +%d)
    7 echo "J - Nous somme le : $J"
    8 echo "M2 - Le 2em mardi de ce mois est le : $M2"
    9 echo "MD - Le dernier mardi de ce mois est le : $MD"
    10 echo
    11
    12 read M2 MD <<<$(ncal | awk '/^je/ {print $3, $NF}'); J=$(date +%d)
    13 if [ $J -eq $M2 ]; then
    14 echo 2eme mardi
    15 elif [ $J -eq $MD ]; then
    16 echo dernier mardi
    17 else
    18 echo journée banale et affligeante
    19 fi
    serveur@debian:~$

    j'ai ce message d'erreur :
    serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
    J - Nous somme le : 26
    M2 - Le 2em mardi de ce mois est le : 12
    MD - Le dernier mardi de ce mois est le : 26

    /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh: ligne 15 : [: 26 : nombre entier attendu comme expression
    journée banale et affligeante
    serveur@debian:~$

    2em test
    Et avec ce code :
    serveur@debian:~$ cat -n /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
    1 #!/bin/bash
    2
    3
    4 s=(lundi mardi mercredi jeudi vendredi samedi dimanche)
    5 #wd=(Mo Tu We Th Fr Sa Su)
    6 wd=(lu ma me je ve sa di)
    7 j=${s[$(date +%u)-1]}; d=${wd[$(date +%u)-1]} ;
    8 read M2 MD <<<$(ncal | awk -v d=$d '$1 ~ d {print $3, $NF}'); J=$(date +%d)
    9 if [ $J -eq $M2 ]; then
    10 echo 2eme $j
    11 elif [ $J -eq $MD ]; then
    12 echo dernier $j
    13 else
    14 echo journée banale et affligeante
    15 fi
    16 echo "J - Nous somme le : $J"
    17 echo "M2 - Le 2em mardi de ce mois est le : $M2"
    18 echo "MD - Le dernier mardi de ce mois est le : $MD"
    19 echo
    20
    21
    22 exit 0

    Avec comme retour :
    serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
    /home/serveur/scripts/crontab/envoi-mail-gullivar-mardis.sh: ligne 34 : [: 26 : nombre entier attendu comme expression
    journée banale et affligeante
    J - Nous somme le : 26
    M2 - Le 2em mardi de ce mois est le : 12
    MD - Le dernier mardi de ce mois est le : 26

    serveur@debian:~$

    Je n'arrive pas a comprendre pourquoi chez vous ça marche et chez moi non ????

    Merci.
    0
    1. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Salut,

      Rajoute l'option "-h" à
      ncal
      .

      Voilà comment est vue ta variable $MD :
      $ echo "${MD}" | cat -A
      _^H2_^H6$

      Ci-dessous la différence sans et avec l'option -h :

      $ ncal | cat -A
      Juin 2014 $
      lu 2 9 16 23 30$
      ma 3 10 17 24 $
      me 4 11 18 25 $
      je 5 12 19 _^H2_^H6 $
      ve 6 13 20 27 $
      sa 7 14 21 28 $
      di 1 8 15 22 29 $

      $ ncal -h | cat -A
      Juin 2014 $
      lu 2 9 16 23 30$
      ma 3 10 17 24 $
      me 4 11 18 25 $
      je 5 12 19 26 $
      ve 6 13 20 27 $
      sa 7 14 21 28 $
      di 1 8 15 22 29 $
      0
    2. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      effectivement, bien que chez moi:
      $ read M2 MD <<<$(ncal | awk -v d=Th '$1 ~ d {print $3, $NF}'); J=$(date +%d)
      $ echo $M2 $MD | cat -A
      12 26$
      $ echo "${M2} ${MD}" | cat -A
      12 26$
      0
    3. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Il m'a fallu un moment pour trouver d'où venaient les caractères zarbis ;-\

      Voilà ce que me renvoyait le shell (set -x) :
      + '[' 26 -eq 12 ']'
      + '[' 26 -eq $'_\b2_\b6' ']'
      ./plop: ligne 12 : [: 26 : nombre entier attendu comme expression
      0
    4. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      mon ncal supprime les effets video si il y a un pipe ou >
      0
    5. zipe31 Messages postés 34620 Date d'inscription   Statut Contributeur Dernière intervention   6 501
       
      Idem sous Debian (pas d'effet avec un pipe). Par contre sous Mint les effets restent ;-\
      0
  19. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonsoir,

    Le serveur est sur Debian Wheezy 3.0.4.

    Merci.
    0
    1. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
       
      et avec ncal -h ?
      placer un set -x au début du script
      0
  20. xunil2003 Messages postés 766 Date d'inscription   Statut Membre Dernière intervention   14
     
    Bonjour,

    Avec :
    serveur@debian:~$ cat -n /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
    1 #!/bin/bash
    2
    3
    4 read M2 MD <<<$(ncal -h | awk '/^ve/ {print $3, $NF}'); J=$(date +%d)
    5 if [ $J -eq $M2 ]; then
    6 echo 2eme mardi
    7 else
    8 if [ $J -eq $MD ]; then
    9 echo dernier mardi
    10 else
    11 echo journée banale et affligeante
    12 fi
    13 fi
    14 echo
    15 echo "J - Aujourd'hui nous sommes le : $J"
    16 echo "M2 - Le 2em mardi de ce mois est le : $M2"
    17 echo "MD - Le dernier mardi de ce mois est le : $MD"
    18 echo
    19
    20 exit 0
    serveur@debian:~$
    Vous remarquerez que j'ai m'y l'option -h à ncal.

    Il m'affiche correctement que nous sommes le dernier Vendredi du mois.
    serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
    dernier mardi

    J - Aujourd'hui nous sommes le : 27
    M2 - Le 2em mardi de ce mois est le : 13
    MD - Le dernier mardi de ce mois est le : 27

    serveur@debian:~$

    Si je remplace dans le code
    awk '/^ve/
    par
    awk '/^ma/
    il me retourne :

    serveur@debian:~$ bash /home/serveur/scripts/crontab/envoi-mail-assoc-mardis.sh
    journée banale et affligeante

    J - Aujourd'hui nous sommes le : 27
    M2 - Le 2em mardi de ce mois est le : 10
    MD - Le dernier mardi de ce mois est le : 24

    serveur@debian:~$


    Je pense que c'est bon maintenant.

    Merci.
    0