Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/01/2011, 11h48   #1
Invité de passage
 
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 1
Points : 1
Par défaut Renvoi d'erreur commande mysql

Bonjour,

voila pour faire simple j'ai besoin de renvoyer la sortie d'erreur dans un fichier texte de ma commande :

Code :
 DATABASES="$( mysql -u $USER -p$DBPASS -Bse 'show databases;')"
j'ai testé quelques commandes dont le "2>>$TMP_ERROR (fichier log d'erreur)" à la fin mais sans succès
Sur mon fichier log figurant mes tables aussi

Etant nouveau sur linux et donc shell je suis un peu perdu ...

je vous remercie d'avance
leon187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 12h07   #2
Expert Confirmé Sénior
 
Homme Laurent Willems
Expert Stop/Start
Inscription : septembre 2002
Messages : 2 547
Détails du profil
Informations personnelles :
Nom : Homme Laurent Willems
Âge : 33
Localisation : Belgique

Informations professionnelles :
Activité : Expert Stop/Start

Informations forums :
Inscription : septembre 2002
Messages : 2 547
Points : 4 261
Points : 4 261
Hello,

Tout ceci est un petit peu flou.

A quoi sert ta variable DATABASES?
Peux-tu nous montrer l’entièreté de ton script?
Où as-tu placé ce fameux "2>>$TMP_ERROR"? En executant ton script? Dans ton script?
__________________
Alea Jacta Test!
Mygale1978 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2011, 12h09   #3
Invité de passage
 
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 1
Points : 1
bon comme quoi on peut y arriver, en essayant des solutions au hasard ....

je donne la solution que j'ai trouvée au cas où

Code :
 DATABASES="$(`mysql -u $USER -p$DBPASS -Bse 'show databases;' 2>>$TMP_ERROR` )"
leon187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 12h21   #4
Invité de passage
 
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 1
Points : 1
bon alors maintenant ça marche plus , je vais devenir fou

il s'agit d'un script de backup d'une base de données
Code :
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
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
 TMP_ERROR="tmp_error.log"
TMP_LOG="tmp_backup.log"
>$TMP_LOG
>$TMP_ERROR
echo "-- Rapport généré automatiquement " >> $TMP_LOG
echo "" >> $TMP_LOG
 
# edebut de la procedure de sauvegarde
echo "["$DATE_PRECISE"] - MySQL : DEBUT sauvegarde de la base $NOM_BASE" >> $TMP_LOG
 
#USER="test" 
 
# On liste toutes les bases de données auquel l'utilisateur a access
 
DATABASES="$( `mysql -u $USER -p$DBPASS -Bse 'show databases;' 2>>$TMP_ERROR` )"
 
 
 
 
 
# Si une erreure survient pendant la liste des bases
if [ ! $? -eq 0 ];
then
          echo "["$DATE_PRECISE"] - Une erreure s'est produite pendant le listage des bases de données" >> $TMP_LOG
        cat $TMP_LOG >> $LOG
    cat $TMP_ERROR >> $LOG
    #rm $TMP_ERROR
    #rm $TMP_LOG
        $DIALOG --title "erreur" --msgbox 'Une erreure est survenue pendant le listage des bases de donnees' 0 0
        exit 1
fi
 
 
# Boucle : pour chaque base , afin de trouver la bonne
for BASE in $DATABASES
do
 
    # test de la base en cour pour savoir si elle correspond à celle que l'on veut
    if [ "$BASE" = "$NOM_BASE" ];
    then
 
 
    # Analyse de la base
    mysqlcheck -u $USER -p$DBPASS -c -a $BASE 2>>$TMP_ERROR
 
    echo "["$DATE_PRECISE"] - Sauvegarde de la base '"$BASE"'" >> $TMP_LOG
 
    # Sauvegarde de la baseBACKUP
 
    NOMFICHIER=$BASE"_"$DATE_PRECISE".sql"
 
    (mysqldump -h $HOST -u $USER -p$DBPASS --force $BASE > "$NOMFICHIER") 2>>$TMP_ERROR 
 
    # --force = Continue même si une erreur SQL survient durant l'export.
 
        # Une erreure pendant la sauvegarde de la base
        if [ ! $? -eq 0 ];
        then
                rm -rf $DATE
                echo "["$DATE_PRECISE"] - Une erreure est survenue pendant la sauvegarde de la base '"$BASE"'" >> $TMP_LOG
                   cat $TMP_LOG >> $LOG
                   rm $TMP_LOG
        cat $TMP_ERROR >> $LOG
        rm $TMP_ERROR    
               $DIALOG --title "erreur" --msgbox "Une erreure est survenue pendant la sauvegarde de la base $TEST" 0 0
                   exit 1       
    fi
 
     fi
done
la variable DATABASES contient la liste des bases de données présente dans mon serveur, il s'agit en faite d'en sélectionner une seule ($NOM_BASE).

Mais il m'a été demandé qu'en cas d'erreur, le retour d'erreur soit écrit sur mon fichier log
leon187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/01/2011, 16h26   #5
Expert Confirmé Sénior
 
Avatar de frp31
 
Homme francois
Ingénieur systèmes et réseaux
Inscription : juillet 2006
Messages : 3 534
Détails du profil
Informations personnelles :
Nom : Homme francois
Âge : 35
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Ingénieur systèmes et réseaux
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : juillet 2006
Messages : 3 534
Points : 7 743
Points : 7 743
Code :
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
 
operateur@undertaker:~$ mysql -u root -p -Bse 'show databases' 2> err 1> liste
Enter password: 
operateur@undertaker:~$ cat 1
cat: 1: Aucun fichier ou répertoire de ce type
operateur@undertaker:~$ cat liste
information_schema
cacti
centreon
centstatus
centstorage
compendium
savoirs
eco
fengoffice
documents
mails
spams
mysql
ndo
ndoutils
perso
plan_migration2_1270549207283
postfix
test
test_2
chronologie
grants
mindmaps
velo
operateur@undertaker:~$ cat err
operateur@undertaker:~$
bref la solution à ton problème est bien de délimiter les messages avec 2> fichier comme tu l'a fait mais de générer la liste des bases avec 1> liste

puis de réaliser le traitement par exemple avec une boucle

Code :
1
2
3
4
while read ligne
do
mysqldump ....TESOPTIONS....... --database $ligne | gzip > $ligne.$(date +%Y%m%d).gz 1> /tmp/$file.log 2> /logs/err/$file.err
done < liste
frp31 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2011, 17h07   #6
Expert Confirmé Sénior
 
Avatar de N_BaH
 
Inscription : février 2008
Messages : 2 068
Détails du profil
Informations forums :
Inscription : février 2008
Messages : 2 068
Points : 4 140
Points : 4 140

si je ne met pas les backticks (`), pour moi ça fonctionne : j'ai bien le nom des bases de données dans la variable, et les messages d'erreurs dans le fichier_log
...
?
si je laisse les backticks, le shell tente d'exécuter le nom de la première base de données => erreur !!!
N_BaH est actuellement connecté   Envoyer un message privé Réponse avec citation 10
Vieux 11/01/2011, 18h16   #7
Invité de passage
 
Inscription : janvier 2011
Messages : 4
Détails du profil
Informations forums :
Inscription : janvier 2011
Messages : 4
Points : 1
Points : 1
Honte à moi, je me suis perdu avec les ` (que j'ai pas encore assimilé) mais bon oui la solution marche N Bah.

Je crois que je me suis embrouillé avec les >&1, 2>, ....


Enfin merci quand de m'avoir répondu
leon187 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 19h26.


 
 
 
 
Partenaires

Hébergement Web