bonjour, je vooulais faire un script de backup mais j’ai des erreur et je ne voi pas pourquoi. voici mon script:
##########################################
#!/bin/bash
#DATEJOUR=`date +'%w'`
DATEJOUR=`date +'%d'-'%m'-'%y'_'%H'-'%M'`
DATE=`date`
MAIL="" #Mail de la personne qui recevra le rapport
CHEMIN="/root/backup/save" # Chemin de la sauvegarde (sans le '/' à la fin)
######logs######
echo "===== Rapport de sauvegarde =====" > /root/backup/result_backup.txt
if [ "$1" = "increment" ]
then
DATEOLD=`cat date.increment.dump`
tar -c -G -v -z -f $CHEMIN/backup_increment.tar.gz -b 126 -N "$DATEOLD" -V "Sauvegarde du $DATEOLD au $DATE" $2 $3 $4 $5 $6 $7 $8 $9 >> /root/backup/result_backup.txt
echo $DATE > date.increment.dump
mais qd je lance mon script: ./Backup.sh increment /root/Dossier/
il me dit:
cat: date.increment.dump: Aucun fichier ou répertoire de ce type
pourtant, mon fichier date.increment.dump est bien cree et rempli !!!!
et lorque je relance sans rien changer, il me met:
./Backup.sh increment /root/Dossier
tar: Substitution de 1970-01-01 00:59:59 pour un format inconnu de date mer nov 16 12:11:00 CET 2005' tar: Retrait de l'en-tête/’ des noms des membres
Une remarque toute bête, peut être faut-il que tu t’assures que ton script ne se trompe pas de chemin d’accès à ton fichier “date.increment.dump”.
Ajoute le chemin complet au fichier lors du cat.
Bon alors j’ai resolu UN problème mais maintenent, y’en a un autre, cela fonctionne tres bien sur une red hat 9 et des que je met mon script sur mon serveur de backup, paf, ca plante !!!
##########################################
#!/bin/bash
DATE=`date +'%Y-%m-%d %H:%M:%S'`
DATE_BAC=`date +'%Y-%m-%d_%Hh%Mm%Ss'`
CHEMIN_SAUVEGARDE=$2 # Chemin de la sauvegarde (sans le '/' à la fin)
CHEMIN_DONNEES="/root/backup"
FICHIER="$CHEMIN_DONNEES/date.increment.dump"
if [ -f $FICHIER ] #si pas de date de dernier backup alors on fait un backup total a la place
then
MODE="$1"
else
MODE="TOT"
fi
##############log###############
echo "===== Rapport de sauvegarde =====" > $CHEMIN_DONNEES/result_backup.txt
######incrementielle############
if [ "$MODE" = "INC" ]
then
DATEOLD=`cat $CHEMIN_DONNEES/date.increment.dump`
tar -c -G -v -z -f $CHEMIN_SAUVEGARDE/backup_inc_$DATE_BAC.tar.gz -b 126 -N "$DATEOLD" -V "Sauvegarde du $DATEOLD au $DATE" $3 $4 $5 $6 $7 $8 $9 >> $CHEMIN_DONNEES/result_backup.txt
echo $DATE > $CHEMIN_DONNEES/date.increment.dump
#############totale##############
elif [ "$MODE" = "TOT" ]
then
tar -c -G -v -z -f $CHEMIN_SAUVEGARDE/backup_tot_$DATE_BAC.tar.gz -b 126 -V "Sauvegarde du $DATE" $3 $4 $5 $6 $7 $8 $9 >> $CHEMIN_DONNEES/result_backup.txt
echo $DATE > $CHEMIN_DONNEES/date.increment.dump
else
echo "Problème de paramètres--> syntaxe: ./Backup.sh mode dest src1 src2 src3 ...."
echo "-----------------------------------------"
echo "Backup Complet:"
echo "./backup.sh TOT média_ou_enregistrer dossier_a_sauver dossier2 dossier3 ... "
echo "Copie total du dossier mi en paramettre"
echo "-----------------------------------------"
echo "Backup incremental:"
echo "./backup.sh INC média_ou_enregister dossier_a_sauver dossier2 dossier3 ..."
echo "Seul les fichiers ajouté ou modifié depuis le dernier backup sera ajouté "
echo "-----------------------------------------"
echo "Exemple: ./Backup.sh INC /dev/st0 /mnt/NDdujour/"
echo "-----------------------------------------"
fi
###########fin du log envoie par mail#########
mail -s Backup_$3 $MAIL < "$CHEMIN_DONNEES/result_backup.txt"
rm $CHEMIN_DONNEES/result_backup.txt
################################################
Donc voila, sur un pc, ca marche nikel, sur l’autre pas !!! (j’ai evidement mi les bon rep !!) il me dit:
: command not found
./backup.sh: line 34: syntax error near unexpected token elif' '/backup.sh: line 34:elif ["$MODE" = “TOT” ]
Euh… Question toute bête :
Dans ton code y a bien un espace en le “[” et ta variable “$MODE” ?
Sinon essaye d’enlever les guillemets pour exprimer tes variables dans les tests d’égalités.
pour lancer un script, il faut des librairie de base? parce que il me semble que le sme serveur est vraiment tres light et pour des raison de securité, y’a pas de couche de compil??? !!!
et bien ma fois, c’est pareil, j’ai bien mi #!/bin/sh a la premiere ligne, premier caractère.
j’ai essayé aussi #!/bin/bash
j’ai toujours la meme erreur: : bad interpreter: No such file or directory
je comprend vraiment pas, je pense que ca viens de la distrib car j’ai testé ce meme code sur une red hat 9 et ca tourne nickel, donc ca viens de mon sme serveur, mais je sais pas pourquoi !!!
Bon et bien j’ai resolu l’affaire, ca devait etre le fichier qui etait conrompu ou les 2 version de linux imcompatible car j’ai cree un nouveau script a parti de sme cette fois et fait coppier coller du script et la ca marche !!!
donc maintenent, j’ai n autre souci, dans mon script, je met le chemin ou je veux suver l’archive en param. si je met un rep de mon sme, tt fonctionne bien, mais moi, je veux sauver sur bande. mais qd je met /dev/st0, il me met:
/dev/st0/backup_tot_2005-11-22_20h23m33s.tar.gz: Cannot open: N'est pas un répertoire
tar (child): Error is not recoverable: exiting now
./backup.sh: line 51: 10622 Relais brisé (pipe) tar -c -G -v -z -f $CHEMIN_SAUVEGARDE/backup_tot_$DATE_BAC.tar.gz -b 126 -V "Sauvegarde du $DATE" $3 $4 $5 $6 $7 $8 $9 >>$CHEMIN_DONNEES/result_backup.txt
Le problème c’est que tar (TApe Recorder) est (historiquement) une appli pour écrire directement sur les bandes qui sont dépourvues de système de fichier mais par contre qui gère tout ce qui est incrémentation etc… Donc à mon avis t’as fait beaucoup de script pour rien et je t’invite à taper un man tar
mais en tout cas la syntaxe est à mon avis (si quelqu’un pouvait confirmer)
tar -f /dev/st0
et pas tar -f /dev/st0/fichier qui est absurde… st0 est une block device pas un répertoire.