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 :

Script de vérification de présence de fichiers


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Invité
    Invité(e)
    Par défaut Script de vérification de présence de fichiers
    Bonjour,
    Actuellement je fais un dump de plusieurs de mes bases MySQL, mais je désire envoyer un mail pour vérifier la présence de mes fichiers.
    Pour cela je fais un if sur des commandes find mais il me signale des problèmes de droit sur l’accès à mes dossiers, même executé en root et avec l'utilisateur administrateur alors que la commande find seule exécutée fonctionne.

    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
    #!/bin/bash
     
     
    cd /home/administrateur/mon_dossier_de_stockage_de_mes_backups
     
    for i in base1 base2 base3 base4; do
    mysqldump --user=root --password='mon_passe' $i > ${i}_`date +%D | sed 's;/;-;g'`.sql
    tar jcf ${i}_`date +%D | sed 's;/;-;g'`.sql.tar.bz2 ${i}_`date +%D | sed 's;/;-;g'`.sql
    rm ${i}_`date +%D | sed 's;/;-;g'`.sql
    done
     
    DATETITRE=$(date +%D | sed 's;/;-;g')
    CMD1=$(find /home/administrateur/mon_dossier_de_stockage_de_mes_backups -name base1_$DATETITRE.sql.tar.bz2)
    CMD2=$(find /home/administrateur/mon_dossier_de_stockage_de_mes_backups -name base2_$DATETITRE.sql.tar.bz2) 
    CMD3=$(find /home/administrateur/mon_dossier_de_stockage_de_mes_backups -name base3_$DATETITRE.sql.tar.bz2)
    CMD4=$(find /home/administrateur/mon_dossier_de_stockage_de_mes_backups -name base4_$DATETITRE.sql.tar.bz2)
    if $CMD1 -a $CMD2 -a $CMD3 -a $CMD4 
    then mail -s "Sauvegarde BDD terminee avec succes" monmail@mail.fr <<< "Les sauvegardes des bases de donnees ont ete effectuees avec succes"
    else mail -s "ERREUR Sauvegarde " monmail@mail.fr <<< "Les sauvegardes des bases de donnees n'ont pas ete effectuees, il y a un probleme. \n voir les scripts de sauvegarde et les sauvegardes dans \home\administrateur\mon_dossier_de_stockage_de_mes_backups"
    fi
    J'ai essayé aussi avec if [[cmd1 && cmd2... ]] mais rien, je pense que ma manière de faire n'est pas bonne.

    Par la suite le script sera exécuté du crontab de root
    Merci d'avance
    Dernière modification par Invité ; 12/05/2014 à 12h56.

  2. #2
    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
    Par défaut
    Tu peux utiliser cette syntaxe :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [ "$CMD1" -a "$CMD2" -a "$CMD3" -a "$CMD4" ]
    mais les variables intermédiaires (CMD1, ...) ne sont pas utiles si tu ne les utilises pas après:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if [ "$(find /home/administrateur/mon_dossier_de_stockage_de_mes_backups -name base1_$DATETITRE.sql.tar.bz2)" -a 
         "$(find /home/administrateur/mon_dossier_de_stockage_de_mes_backups -name base2_$DATETITRE.sql.tar.bz2)" -a ...

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    si les fichiers ne sont pas dans des sous-dossiers de /home/administrateur/mon_dossier_de_stockage_de_mes_backups,
    alors le find ne sert à rien.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    backupdsDir=/home/administrateur/mon_dossier_de_stockage_de_mes_backups
    dateT=$(date +%m-%d-%Y)
    test -f "$backupsDir/base1_$dateT.tar.bz2" -a -f "$backupsDir/base2_$dateT.tar.bz2" && echo mailOK || echo mailAlert
    tu pourrais affiner et faire une boucle sur les noms des fichiers pour envoyer un mail s'il n'en manque qu'un seul, et savoir lequel !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    test -f "$backupsDir/base1_$dateT.tar.bz2" -a -f "$backupsDir/base2_$dateT.tar.bz2" && echo mailOK || echo mailAlert
    tu pourrais affiner et faire une boucle sur les noms des fichiers pour envoyer un mail s'il n'en manque qu'un seul, et savoir lequel !
    Bonjour

    Eventuellement mettre un test -s permettrait de détecter qu'en plus le fichier n'est pas vide (parce qu'avoir une sauvegarde présente mais vide...)
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Bonjour

    Eventuellement mettre un test -s permettrait de détecter qu'en plus le fichier n'est pas vide (parce qu'avoir une sauvegarde présente mais vide...)
    Donc j'ai fais un test avec un simple fichier vide
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    test -s fichier_test && echo fichier non vide|| echo fichier vide
    fichier vide
    Par contre si j'archive ce fichier et que je test si il est vide il me dit que non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tar jcf fichier_test.tar.bz2 fichier_test 
    test -s fichier_test.tar.bz2 && echo fichier non vide|| echo fichier vide
    fichier non vide
    Donc dans mon cas, j'ai pensé tester sur le .sql avant l'archivage mais le .sql crée par mysqldump n'est jamais vide (testé sur une base sans table)! Je ne peux donc pas tester si un fichier est vide, il ne le sera jamais.
    Mais j'ai remarqué que mysqldump me crée le fichier .sql même si la base voulue n'existe pas, je n'ai pas trouvé d'argument a mysqldump pour tester cela.
    Voici mon script actuel qui a bien changé, si vous avez d'autres améliorations je suis preneur . Au final mes find ont disparus et mes sauvegardes se font sur un lecteur mappé au démarrage de mon système.

    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
     
    #!/bin/bash
    cd /home/chemin_lecteur_mappé
    #Sauvegarde des bases
    for i in base1 base 2 base3 base 4; do
    mysqldump --user=root --password='mon_passe' $i > ${i}_`date +%D | sed 's;/;-;g'`.sql
    tar jcf ${i}_`date +%D | sed 's;/;-;g'`.sql.tar.bz2 ${i}_`date +%D | sed 's;/;-;g'`.sql
    rm ${i}_`date +%D | sed 's;/;-;g'`.sql
    done
    #Recherche de la ou des base(s) manquante(s)
    for i in base1 base 2 base3 base 4; do
    if [ -f /home/chemin/${i}_`date +%D | sed 's;/;-;g'`.sql.tar.bz2 ]
    then present="$present ${i}"
    else non_present="$non_present ${i}"
    fi
    done
    #Envoi de mail de confirmation ou d'erreur
    if [ "$non_present" == "" ]
    then mail -s "Sauvegarde BDD Base1/Base2/Base3/Base4 terminees avec succes" mon_mail@mail.f <<< "Les sauvegardes des bases de donnees Base1/Base2/Base3/Base4 ont ete effectuees avec succes"
    else mail -s "ERREUR de sauvegarde pour $non_present" mon_mail@mail.fr <<< "La sauvegarde de la base de donnee $non_present n'a pas ete effectuee, il y a un probleme. Voir les scripts de sauvegarde dans \home\chemin\Scripts et les sauvegardes dans \home\chemin"
    fi
    Mon test de fichiers manquants serait peut être plus optimisé dans la première boucle en terme de rapidité d’exécution du script?

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

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    pourquoi date | sed ?
    pourquoi rappeler la commande date ? utilise une variable !
    comme je l'ai montré :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    dateT=$(date +%m-%d-%Y)
    Mon test de fichiers manquants serait peut être plus optimisé dans la première boucle en terme de rapidité d’exécution du script?
    oui, une seule boucle devrait suffire.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if test -n "$nonpresent"
    ...
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par apo39 Voir le message
    Par contre si j'archive ce fichier et que je test si il est vide il me dit que non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    tar jcf fichier_test.tar.bz2 fichier_test 
    test -s fichier_test.tar.bz2 && echo fichier non vide|| echo fichier vide
    fichier non vide
    Ben c'est normal !!!

    Une archive, même contenant un fichier vide, contient bien quelque chose donc l'archive elle-même n'est pas vide !!! (et comme tu testes si l'archive est vide et non si le fichier archivé est vide)...

    Citation Envoyé par apo39 Voir le message
    Donc dans mon cas, j'ai pensé tester sur le .sql avant l'archivage mais le .sql crée par mysqldump n'est jamais vide (testé sur une base sans table)! Je ne peux donc pas tester si un fichier est vide, il ne le sera jamais.
    Une base, même sans table (donc vide) est quand-même quelque chose. Donc mysqldump archivant ce quelque chose n'est pas vide. Moi je parlais d'un truc comme par exemple mysqldump échoué. Dans ce cas là, le fichier sortant est bel et bien vide...

    Citation Envoyé par apo39 Voir le message
    Mais j'ai remarqué que mysqldump me crée le fichier .sql même si la base voulue n'existe pas, je n'ai pas trouvé d'argument a mysqldump pour tester cela.
    echo "" | mysql nom_bdd 1>/dev/null 2>&1 && echo "nom_bdd" existe || echo "nom_bdd n'existe pas ou n'est pas accessible"...
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  8. #8
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par jlliagre Voir le message
    Tu peux utiliser cette syntaxe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if [ "$(find /home/administrateur/mon_dossier_de_stockage_de_mes_backups -name base1_$DATETITRE.sql.tar.bz2)" -a 
         "$(find /home/administrateur/mon_dossier_de_stockage_de_mes_backups -name base2_$DATETITRE.sql.tar.bz2)" -a ...
    Ah oui c'est mieux merci!


    #N_BaH: Ah oui savoir quel fichier est manquant est la prochaine étape, merci

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

Discussions similaires

  1. Script de vérification pour la bonne réception d'un fichier
    Par 20132014 dans le forum Shell et commandes GNU
    Réponses: 28
    Dernier message: 12/09/2013, 20h39
  2. [XSLT 2.0] Vérification de la présence de fichier images
    Par dobru dans le forum XSL/XSLT/XPATH
    Réponses: 4
    Dernier message: 10/05/2012, 19h35
  3. [SSIS] [2K5] vérification de la présence des fichiers
    Par Monstros Velu dans le forum SSIS
    Réponses: 1
    Dernier message: 16/03/2010, 11h54
  4. Script permettant l'affichage d'un fichier via onmouseover
    Par HNT dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 12/10/2005, 22h58
  5. script de vérification
    Par break_71 dans le forum Général JavaScript
    Réponses: 9
    Dernier message: 08/06/2005, 17h24

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