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 18/10/2006, 18h22   #1
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
Par défaut Problème script shell de sauvegarde

salut,
j'utilise un script shell pour faire une sauvegarde hebdomadaire de mes bases de donnees.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
#!/bin/sh
 
USER=*******
PASS=*******
DESTINATION=/var/backups
 
DATE='date +%Y-%m-%d'
WEEK='date +%W'
let "DEL=$WEEK-4"
 
mysqldump -u $USER --password=$PASS bioinformatics | gzip > $DESTINATION/bioinformatics.$WEEK.$DATE.sql.gz
 
rm -rf $DESTINATION/$DEL.*.sql.gz
ce script se lance grace a un cron tous les samedis à 3 h du mat:
Code :
0 3 * * 6 /usr/local/bin/backup_database
mais voici le nom de mon fichier :
Code :
1
2
3
root@STRI-DB01:/var/backups# ls -l
total 1036
-rw-r--r--  1 root root       20 Oct 14 03:00 bioinformatics.date +%W.date +%Y-%m-%d.sql.gz
c'est pas tout a fait ce que je voulais et comme je suis pas un pro du shell , j'aurai besoin d'un petit coup de main !
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/10/2006, 18h55   #2
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 903
Points : 1 903
Pour qu'un variable prenne la valeur d'une commande éxécutée, il faut utiliser les backquotes et non pas les quotes simples.

Tu as les quotes simples sur la touche 4 :
Citation:
4
'{
Sur la touche 7 tu as :
Citation:
7
è`
Donc tu fais [Alt Gr] + [7] et tu auras le caractère qu'il te faut.

Tu peux aussi consulter cette documentation bash ou cette documentation ksh.

Par ailleurs dans un script éxécuté via la crontab, il faut que tous tes chemins soient absolus : Cela veut dire que pour date par exemple, tu vas lancer , et mettre le chemin complet de date dans ton script. Il peut être utile de mettre le chemin et la commande dans une variable pour avoir une maintenance de script plus facile.

Tu devrais peut être considérer la gestion des erreurs dans ton script en utilisant la redirection des erreurs avec la doc bash ou la doc ksh

Bon courage.
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2006, 17h53   #3
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
J'ai un peu modifié le script, ce n'est pas définitif, mais j'aimerai avoir l'avis de personnes qui s'y connaissent.
J'avoue ne pas trop savoir comment m'y prendre pour la gestion des erreurs. Je lis la doc mais c'est un peu touffu alors...

Pensez-vous qu'il y ait une chance pour que ça marche?
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#!/bin/sh
 
###################################################################
### save the website   ############################################
 
USER=****
PASS=****
DESTINATION=/var/backups
DATE_CMD=/bin/date
DATE=`$DATE_CMD +%Y-%m-%d`
FILENAME=www.$DATE.tar.gz
 
tar cfvz $FILENAME /var/www/CTFS /var/www/biogeodb /var/www/bold /var/www/css /var/www/maps             
mv -f /var/www/$FILENAME $DESTINATION       
 
###################################################################
### FTP transfert #################################################
 
sftp ******@***.***.***.***
********
cd sql_backup
binary 
mput $DESTINATION/$FILENAME
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2006, 22h58   #4
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 903
Points : 1 903
Code :
tar cfvz $FILENAME /var/www/CTFS /var/www/biogeodb /var/www/bold /var/www/css /var/www/maps
Tu peux mettre le chemin de tar( comme tu l'as fait pour date), les paramètres et même les répertoires cibles dans des variables.
Code :
mv -f /var/www/$FILENAME $DESTINATION
Même principe

Il y a très souvent moyen d'éviter d'utiliser cd dans un script. J'ai toujours trouvé que ça n'apportait que des ennuis d'utiliser cd.
Par ailleurs ça peut aussi valoir le coup de mettre ce répertoire dans une variable

Si tu mets un maximum de données en variable, ton script sera plus flexible. Tu n'auras qu'à changer tes variables en début de programme, et si par hasard tes chemins ont changé, tu n'as pas à aller chercher dans les fin fonds du script.

je te conseille la lecture de cet article.
Tu peux aussi jeter un coup d'oeil à
.

Bon courage.
__________________
Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
ggnore est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 27/10/2006, 16h03   #5
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
merci pour tes réponses et tes liens.

du coup, pour la gestion des erreurs, vaut-il mieux faire ?
Code :
tar cfvz $FILENAME $PATH/CTFS $PATH/bioiogeodb $PATH/bold $PATH/css $PATH/maps 1>log_backup_website 2>&1
ou
Code :
tar cfvz $FILENAME $PATH/CTFS $PATH/bioiogeodb $PATH/bold $PATH/css $PATH/maps | tee log_backup_website
Ensuite, je ne vois pas très bien comment remplacer le cd, car la commande mput n'accepte que l'argument local file.
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/11/2006, 16h10   #6
Membre émérite
 
Avatar de julien.63
 
Inscription : décembre 2005
Messages : 1 322
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 1 322
Points : 981
Points : 981
Envoyer un message via MSN à julien.63
je fais des essais mais je dois pas être bien doué car ça ne fonctionne pas vraiment !
voici mon fichier maintenant.
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
#!/bin/sh
#backup of the bioinformatics website
#every week (see crontab -e for more details)
 
 
###################################################################
### save the website   ############################################
LOG=log_backup_website
USER=patons
PASS=******
DESTINATION=/var/backups
PATH=/var/www
DATE_CMD=/bin/date
DATE=`$DATE_CMD +%Y-%m-%d`
WEEK=`$DATE_CMD +%W`
FILENAME=www.$WEEK.$DATE.tar.gz
let "DEL=$WEEK-4"
 
tar cfvz $FILENAME $PATH/CTFS $PATH/bioiogeodb $PATH/bold $PATH/css $PATH/maps 1>$LOG 2>&1
mv -f $PATH/$FILENAME $DESTINATION 1>$LOG 2>&1
 
###################################################################
### FTP transfert #################################################
 
sftp webbackup:******@***.***.***.*** 1>$LOG 2>&1
scp $DESTINATION/$FILENAME webbackup@***.***.***.***:/home/webbackup/website_backup 1>$LOG 2>&1
exit
 
##################################################################
### REMOVE OLD FILES ############################################
rm -rf $DESTINATION/www.$DEL.*.tar.gz 1>$LOG 2>&1
je l'execute en faisant :
Code :
STRI-DB01:/usr/local/bin# ./backup_website
ça dure une fraction de seconde, J'ai aucune archive de créée et voici le log:
Code :
./backup_website: line 27: scp: command not found
Avant j'utilisais "mput", puis "put" mais j'avais le même message !
qu'est ce qui cloche selon vous?
julien.63 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 17h46.


 
 
 
 
Partenaires

Hébergement Web