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

Linux Discussion :

Script bash - creation d'un nouveau rep par mois et annee


Sujet :

Linux

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut Script bash - creation d'un nouveau rep par mois et annee
    Bonjour,

    je viens d'installer awstats qui me genere des stats avec des fichiers HTML seulement, avec les fichiers statique, il est impossible de garder un historique des mois precedents.

    Je souhaiterais donc modifier mon scrip bash qui genere les stats tous les soirs a 01h pour qu'il deplace les fichiers dans un repertoire tous les mois.

    ce genre de script doit exister sur le net et vu que mon niveau est plus que nul en programation bash je ne sais pas comment faire.

    Je pense que je devais faire un teste pour voir si on est le 1er du mois et si c'et le cas, creer un repertoire avec le numero du mois - 1
    et si on est au mois de janvier, creer une nouveau repertoire avec le numero de l'annee.

    Maintenant, reste a le faire.

    si quelqu'un pouvais me donner une petite base du script que je modifierais pour arriver a mes fins ou alors si quelqu'un connais un script deja tout fait ca serait super sympa

  2. #2
    Membre expert
    Avatar de 2Eurocents
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 177
    Détails du profil
    Informations personnelles :
    Âge : 54
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 177
    Points : 3 166
    Points
    3 166
    Par défaut
    Cette méthode risque de t'amener quelques soucis si ton script ne tourne pas, pour une raison quelconque, le premier du mois. Lorsqu'il tournera, le 2 ou après, il trouvera un environnement malpropre et aura un comportement indéfini.

    Il vaut mieux partir sur une approche qui est parfaitement controlée et ne laisse aucune incertitude.

    En ce qui me concerne, pour ce genre de scripts, j'ai la démarche suivante :
    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
    Récupérer le jour
    Récupérer le mois
    Récupérer l'année
    # Tout ceci peut être fait par un découpage du résultat de la commande 'date' à coup de cut ou de awk.
     
    Si le répertoire de l'année n'existe pas
       Alors Creer le répertoire de l'année
    Finsi
     
    Aller dans le répertoire de l'année
     
    Si le répertoire du mois n'existe pas
       Alors Créer le répertoire du mois
    Finsi
     
    Aller dans le répertoire du mois
     
    Si le répertoire du jour n'existe pas
       Alors Créer le répertoire du jour
    Finsi
     
    Aller dans le répertoire du jour
     
    Copier les fichiers souhaités
    Tout ceci se fait très facilement en bash et a un comportement parfaitement déterministe

    Bon courage pour le codage ...

  3. #3
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    tu peut recuperer la date (toute ou partie comme suit :
    dans l'exemple ci dessus cela te retourne :
    10-05
    donc de quoi créer un repertroire ...
    travail sur cette base :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    #recuperation du repertoire courant (mois+an)
    courant=$(date +'%02m-02y')
    rep_courant=mon_rep$courant
    #si le repertoire n'existe pas on le creer
    if [ ! -d $rep_courant ]
    then
        mkdir $rep_courant
    fi
     
    # sauvegarde dans $rep_courant

  4. #4
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    bon, deja avant les fichers d'awstats, je viens de modifier mon script de sauvegarde et rotation des logs.

    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
    #!/bin/sh
     
    #liste des domaines
    domaine[0]=site
    domaine[1]=site1
    domaine[2]=site2
    domaine[3]=site3
    domaine[4]=site4
    domaine[5]=site5
     
     
    #Deplacement des LOG
    echo Deplacement des fichiers .log
    for i in 0 1 2 3 4 5
    do
    mv /var/log/apache/acces-${domaine[i]}.log /home/web/${domaine[i]}/acces-${domaine[i]}-`date +%d-%m-%Y`.log
    mv /var/log/apache/erreur-${domaine[i]}.log /home/web/waouh/erreur-${domaine[i]}-`date +%d-%m-%Y`.log
    mysqldump ${domaine[i]} --user=root --password=pass -h localhost > /home/${domaine[i]}-`date +%d-%m-%Y`.sql
    done
     
    #Deplacement des log du serveur
    mv /var/log/apache/access.log /home/web/access-`date +%d-%m-%Y`.log
    mv /var/log/apache/error.log /home/web/error-`date +%d-%m-%Y`.log
    #Redemarrage du serveur apache
    /usr/sbin/apachectl graceful
     
    echo Debut du transfert.
    # Début du script.
    rsync -alHvzcpog -e 'ssh' --delete /home root@domaine.tld:/backup/
    rsync -alHvzcpog -e 'ssh' --delete /root root@domaine.tld:/backup/
    rsync -alHvzcpog -e 'ssh' --delete /etc root@domaine.tld:/backup/
    echo Fin du transfert.
    echo Suppression des archives SQL
    rm -R /home/*.sql
    echo execution termine
    comme ca, j'ai juste a rajouter le nom du nouveau site dans mon tableau pour que tout soit fait. Ca m'evitera surement des erreurs.

    Par contre j'ai trouvé que le for pour faire le tour du tableau mais c'est pas top vu qu'il faut que je rajoute 6 si jamais j'ai un 6ieme site.

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    pour ce qui est des stats j'ai fait ca:

    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
    #!/bin/sh
    #liste des domaines
    domaine[0]=site
    domaine[1]=site1
    domaine[2]=site2
    domaine[3]=site3
    domaine[4]=site4
    domaine[5]=site5
     
    #Calcul des stats
    for i in 0 1 2 3 4 5
    do
            rep_courant_annee=/home/stats/${domaine[i]}/`date +%Y`
            rep_courant_mois=/home/stats/${domaine[i]}/`date +%Y`/`date +%m`
            if [ ! -d $rep_courant_annee ]
                    then
                            mkdir $rep_courant_annee
            fi
            if [ ! -d $rep_courant_mois ]
                    then
                            mkdir $rep_courant_mois
            fi
     
            /usr/share/doc/awstats/examples/awstats_buildstaticpages.pl -update -config=${domaine[i]} -lang=fr -dir=$rep_courant -
    awstatsprog=/usr/lib/cgi-bin/awstats.pl
    done
    Qu'en pensez vous ?

  6. #6
    Membre chevronné

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Points : 1 803
    Points
    1 803
    Par défaut
    pour ton for .... :
    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
     
    #!/bin/sh
     
     
    domaine[0]=site
    domaine[1]=site1
    domaine[2]=site2
    domaine[3]=site3
    domaine[4]=site4
    domaine[5]=site5
     
    # affiche tout le tableau :
    echo ${domaine[*]}
     
    # affiche la taille du tableau
    echo ${#domaine[*]}
     
    #donc
     
    i=0
    while (( i < ${#domaine[*]} ))
    do
       echo contenue ${domaine[$i]}
            (( i = $i + 1 ))
    done

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

Discussions similaires

  1. Correction Script bash : Exécution et recevoir le test par log ainsi email
    Par hackmed dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 14/05/2015, 04h07
  2. [Batch] Impression par script bash écrit par php
    Par nats76 dans le forum Scripts/Batch
    Réponses: 0
    Dernier message: 06/06/2013, 14h03
  3. [Script bash] Creation users samba
    Par sirap3 dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 31/05/2012, 08h47
  4. Lancer eclipse par script bash
    Par damjal dans le forum Shell et commandes GNU
    Réponses: 8
    Dernier message: 24/05/2008, 14h12
  5. Réponses: 4
    Dernier message: 04/03/2008, 14h46

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