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 POSIX Discussion :

Recuperation automatique de la date de la veille en ksh (cron)


Sujet :

Shell et commandes POSIX

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Septembre 2011
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Septembre 2011
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Recuperation automatique de la date de la veille en ksh (cron)
    Pourriez vous m'aider s'il vous plait car j'ai un problème lors de la récupération de la date de la veille, j'ai obtenu yymmd au lieu de yymmdd (par exemple 11094 au lieu de 110904) lorsque je mets en cron mon script, mais il marche très bien si je l’exécute manuellement.

    voici mon script:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    #Aujourd'hui:
    TODAY=`date +'%m-%d-%y'`
     
    # element induviduels de la date:
    MONTH=`echo $TODAY | cut -d'-' -f1`
    DAY=`echo $TODAY | cut -d'-' -f2`
    YEAR=`echo $TODAY | cut -d'-' -f3`
     
    if [[ `expr $DAY + 0` -eq 1 ]]; then
    if [[ $MONTH -eq 1 ]]; then
    MONTH=12
    YEAR=`expr $YEAR - 1`
    else
    MONTH=`expr $MONTH - 1`
    fi
     
    cal $MONTH $YEAR | grep 31 1>/dev/null 2>&1
    if [[ $? -eq 0 ]]; then
    DAY=31
    else
    DAY=30
    fi
    else
    DAY=`expr $DAY + 0`
    DAY=`expr $DAY - 1`
    fi
     
    if [[ `echo $MONTH | wc -c` -eq 2 ]]; then
    MONTH=0$MONTH
    fi
    if [[ `echo $DAY | wc -c` -eq 2 ]]; then
    DAY=0$DAY
    fi
     
    # Hier:
    daty=$YEAR$MONTH$DAY
    Merci de votre aide, cordialement.

  2. #2
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Points : 173
    Points
    173
    Par défaut
    Bonjour,

    Il me semble qu'il manque la ligne suivante en début de votre script

    Après test de mon coté la valeur de daty passe bien

    Bye

  3. #3
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Pourquoi faire simple quand on peut faire compliqué ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    date --date '1 day ago' +'%y-%m-%d'

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Points : 173
    Points
    173
    Par défaut
    Salut becket,

    Très intéressante ta commande par contre lorsque je l'exécute en ligne de commande ça ne marche pas
    Pourrais-tu être un peu plus précis dans l'écriture de ta commande

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    # date --date '1 day ago' +'%y-%m-%d'
    date : option non admise : -
    date : option non admise : d
    date: invalid argument -- te
    syntaxe :       date [-u] mmjjHHMM[[cc]aa][.SS]
            date [-u] [+format]
            date -a [-]sss[.fff]

  5. #5
    Expert confirmé
    Avatar de becket
    Profil pro
    Informaticien multitâches
    Inscrit en
    Février 2005
    Messages
    2 854
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations professionnelles :
    Activité : Informaticien multitâches
    Secteur : Service public

    Informations forums :
    Inscription : Février 2005
    Messages : 2 854
    Points : 5 915
    Points
    5 915
    Par défaut
    Ces options ne sont disponibles que si tu as installé GNU date, sinon tu dois te servir de $TZ pour afficher le jour d'un autre fuseau horaire.

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Mars 2009
    Messages
    375
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2009
    Messages : 375
    Points : 173
    Points
    173
    Par défaut
    Ok d'accord je comprends mieux l'astuce bon pour dire je n'ai pas GNU donc pas possible d'utiliser ta solution dommage

    Merci A+

  7. #7
    Membre confirmé

    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
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    J'ai trouvé ca qui marche :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo `TZ=MET+24 date +"%D"`
    sur un autre site.

    Mais je veux bien que quelqu'un m'explique pas à pas comment ca marche ...

  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 842
    Points
    7 842
    Par défaut
    Cette commande n'est pas très fiable car elle fournit un résultat incorrect entre minuit et une heure (hiver) ou entre minuit et deux heures (été). La syntaxe "MET+24" est erronée car elle laisse penser qu'il s'agit du temps européen (MET= Middle European Time") décalé de 24 heures mais ce n'est pas le cas. Le nom du fuseau horaire n'est pas utilisé ici.

    Elle affiche l'heure qu'il est dans un fuseau horaire hypothétique décalé de 24 heures par rapport au temps universel. Le problème est que nous ne sommes pas en temps universel mais en GMT+1 ou GMT+2 suivant la période.

    Pour obtenir la date correcte du jour précédent, la commande est celle-ci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    TZ=std+23dst+22,M3.5.0/2,M10.5.0/3 date +"%D"

  9. #9
    Membre confirmé

    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
    Points : 473
    Points
    473
    Billets dans le blog
    1
    Par défaut
    Merci jlliagre,
    Les affectations possibles pour la variable TZ ne me sont pas du tout familiere et celle la en particulier reste encore obscure pour moi ...
    Mais je me suis rendu compte que "date" ne fait pas parti de l'affectation ...
    Je ne savais pas que l'on pouvait faire une affectation de variable suivi d'une commande sans saut de ligne ou ";" contrairement a deux commande successives.

    Si "date" est sensible a TZ ( on voit bien qu'elle change quand on modifie TZ ) et que TZ et deja positionnée sur MET , est-ce que TZ +/-24 est fiable ou le rapport n'est il pas aussi simple comme je crois comprende ta réponse ?

  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 842
    Points
    7 842
    Par défaut
    Si TZ est égal à MET, tu auras l'heure et la date locale exacte. Si TZ est +24, tu auras la date de GMT+24. Cette date sera incorrecte pendant une heure l'hiver et pendant deux heures l'été. Pas vraiment fiable donc.

    Si tu positionne TZ avec la chaine que j'ai indiquée. La date sera toujours correcte sauf si on décide de changer la méthode de calcul des jours de changement d'heure ou si on supprime l'heure d'été.

Discussions similaires

  1. Réponses: 2
    Dernier message: 27/03/2006, 21h17
  2. Ajout automatique de la date..
    Par Karibou dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 02/02/2006, 09h34
  3. [MySQL] Refresh automatique d'une date
    Par glloq8 dans le forum PHP & Base de données
    Réponses: 17
    Dernier message: 21/10/2005, 10h16
  4. Recuperer la date de la veille
    Par Wisefool dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/09/2005, 15h42
  5. date de la veille
    Par liliprog dans le forum C++
    Réponses: 8
    Dernier message: 13/08/2004, 13h41

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