Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 10/08/2006, à 11:28

Ch'Portos

[Résolu] Backup via cron

Bonjour,

Je souhaite utiliser cron pour realiser un BackUp de mon travail en cours quotidiennement au alentours de minuit. Le BackUp se ferait vers un serveur de donnees central sous MS Windows 2000 dans un dossier partage dans lequel j'ai un droit d'ecriture et de lecture

J'ai donc mis dans cron :

smbmount //server1109/MIS /mnt/WIP -o username=MonUser,password=MonPass,rw && cd "/mnt/WIP/WIP/Moi/BackUp" && mkdir "Week `date +%V`/`date +%A` `date +%d`" -p  && cp /home/administrator/Returns/* "Week `date +%V`/`date +%A` `date +%d`/" && smbumoumt /mnt/WIP

La 1ere commande me cree un point de montage dans /mnt/WIP vers mon dossier partage
La 2eme descend dans l'arborescence jusqu'qu dossier souhaite
La 3eme cree un nouveau dossier (avec les dossiers parents si ils existent pas) du genre "Week 32/Thursday 10"
La 4eme copie ce que je veux (c'est a dire tout un dossier)
La 5eme et derniere demonte le pointe de montage.

Le probleme viens de la 3eme commande (enfin je crois que c'est elle) dans laquelle je recois un mail me disant :

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file

Comment se fait-ce ?

Merci d'avamce pour votre aide,
Ch'Portos.

Dernière modification par Ch'Portos (Le 14/08/2006, à 10:55)

Hors ligne

#2 Le 11/08/2006, à 08:56

Ch'Portos

Re : [Résolu] Backup via cron

! Up !

Désolé de remonter ce sujet, mais j'en ai besoin assez rapidement, merci !

Je pense que le probleme viens de la syntaxe dans la 3eme commande, mais quand je l'execute directement en ligne de commande, je n'ai aucun probleme...

Ch'Portos.

Dernière modification par Ch'Portos (Le 11/08/2006, à 09:03)

Hors ligne

#3 Le 11/08/2006, à 08:58

david2b

Re : [Résolu] Backup via cron

Tu veux bien poster ton script en entier stp ?
Merci


Ubuntu Gnome 18.04
bépo-typematrix
Registered Linux User #45312.

Hors ligne

#4 Le 11/08/2006, à 09:02

Ch'Portos

Re : [Résolu] Backup via cron

Et bien je n'ai pas de script, juste cette série de commandes qui s'executent les unes apres les autres (d'ou l'enchainement des "&&") que j'ai mis dans une entrée de la crontab

Je remets ces commandes au besoin :

smbmount //server1109/MIS /mnt/WIP -o username=MonUser,password=MonPass,rw && cd "/mnt/WIP/WIP/Moi/BackUp" && mkdir "Week `date +%V`/`date +%A` `date +%d`" -p  && cp -r /home/administrator/Returns/* "Week `date +%V`/`date +%A` `date +%d`/" && cd && smbumoumt /mnt/WIP

Ch'Portos.

Hors ligne

#5 Le 11/08/2006, à 09:14

david2b

Re : [Résolu] Backup via cron

unexpected EOF while looking for matching ``'

A mon avis c'est un problème dans le cp avec la commande date. J'essaierais de tout scinder en plusieurs lignes, pour voir là ou ça coince...


Ubuntu Gnome 18.04
bépo-typematrix
Registered Linux User #45312.

Hors ligne

#6 Le 11/08/2006, à 10:16

kaworu

Re : [Résolu] Backup via cron

heu, la t'es en train de créer plusieurs dossier. Un dossier "Week" qui est vide, un dossier "32" qui contient un dossier "Friday" qui est vide et un dernier dossier "11" (pour aujourd'hui hein, ça dépend évidement de la date). Du coup cp merde, vu que tu lui donne trop d'arguments.

Ce que tu veux, c'est faire un dossier "Week 32" dans lequel il y'a un dossier "Friday 11" c'est juste ?

On va faire 3 choses :
1) debuger
2) faire un script parce que là ... ^___^
3) optimiser le code, vu que l'on va pas en faire un script juste pour faire joli

#!/bin/bash

smbmount //server1109/MIS /mnt/WIP -o username=MON_USER,password=MON_PASSWORD,rw
cd "/mnt/WIP/WIP/Moi/BackUp"
mkdir -p "Week\ `date +%V`/`date +%A`\ `date +%d`"
cp -r /home/administrator/Returns/* "Week\ `date +%V`/`date +%A`\ `date +%d`"
cd
smbumount /mnt/WIP

Ok c'est déjà mieux, et ça fait ce que tu veux.
Maintenant 3)
étape 1, on met des variable là-où-ça-va-bien :

#!/bin/bash

server="//server1109/MIS"
mount_pt="/mnt/WIP"
user="MON_USER"
pass="MON_PASS"
smbmount $server $mount_pt -o username=$user,password=$pass,rw

backup_dir="/mnt/WIP/WIP/Moi/BackUp"
backup_dir_today="Week\ `date +%V/%A\ \\\%d`"
backup_dir_tosave="/home/administrator/Returns"
cd $backup_dir
mkdir -p $backup_dir_today
cp -r ${backup_dir_tosave}/* $backup_dir_today
cd
smbumount $mount_pt

Comme ça, tu peux le changer facilement pour un autre serveur ou user etc.
deuxième étape, test et echo (en couleur, c'est plus joli)

#!/bin/bash

server="//server1109/MIS"
mount_pt="/mnt/WIP"
user="MON_USER"
pass="MON_PASS"
if [ ! -d "$mount_pt" ]; then
    echo -e "\033[1;31mERREUR : $mount_pt n'existe pas.\n\033[00mfaire \033[1;32mmkdir -p $mount_pt\033[00m avec les droit root."
    exit 1
fi
smbmount $server $mount_pt -o username=$user,password=$pass,rw
if [ $? -ne 0 ]; then
    echo -e "\033[1;31mERREUR : problème de connexion au serveur $server\033[00m"
    exit 1
else
    echo -e "\033[1;32m*\033[00m connexion au serveur $server réussie"
    sleep 1
fi

backup_dir="/mnt/WIP/WIP/Moi/BackUp"
backup_dir_today="Week\ `date +%V/%A\ \\\%d`"
backup_dir_tosave="/home/administrator/Returns"
cd "$backup_dir"
if [ "$PWD" != "$backup_dir" ]; then
    echo -e "\033[1;31mERREUR : Impossible de se déplacer dans $backup_dir ou n'existe pas \033[00m"
    exit 1
fi
mkdir -p "$backup_dir_today"
if [ -d "$backup_dir_tosave" ] && [ -d "${backup_dir}/${backup_dir_today}" ]; then
    echo -en "\033[1;32m*\033[00m copie de $backup_dir_tosave dans $backup_dir_today"
    cp -r "${backup_dir_tosave}/*" "$backup_dir_today"
    if [ $? -ne 0 ]; then
        echo -e "\033[01;31m    ECHEC\033[00m"
    else
        echo -e "\033[01;32m    SUCCES\033[00m"
    fi
else
    echo -e "\033[1;31mERREUR : $backup_dir_tosave ou $backup_dir_today (ou les deux) n'existe(nt) pas \033[00m"
    exit 1
fi
cd
echo -e "\033[1;32m*\033[00m démontage de $mount_pt"
smbumount "$mount_pt"
if [ $? -ne 0 ]; then
    echo -e "\033[1;31mERREUR : problème au démontage de $mount_pt \033[00m"
    exit 1
fi
date
echo -e "\033[1;32m***\033[00m sauvegarde effectuée \033[1;32m***\033[00m"
exit 0

Voilà. Maintenant je te conseil vivement de ne pas mettre d'espace dans le nom de tes dossier...
tu devrai remplacer la ligne

backup_dir_today="Week\ `date +%V/%A\ \\\%d`"

par

backup_dir_today="Week_`date +%V/%A_%d`"

et ça donnerait Week_32/Friday_11 à la place de Week\ 32/Friday\ 11 ...
Crie si y'a qqch qui marche pas, j'ai pas testé..
^____^

Dernière modification par kaworu (Le 11/08/2006, à 10:37)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#7 Le 11/08/2006, à 11:54

david2b

Re : [Résolu] Backup via cron

Bravo kaworu, je n'ai pas eu le temps de me lancer la-dedans, et ton explication est limpide ! smile


Ubuntu Gnome 18.04
bépo-typematrix
Registered Linux User #45312.

Hors ligne

#8 Le 11/08/2006, à 12:51

Ch'Portos

Re : [Résolu] Backup via cron

Ok, je teste ca au plus vite, merci pour tout le code, en plus, comme l'a dit david2b, c'est limpide, meme pour le noob que je suis wink

Je vous tiens au courant !

Ch'Portos.

Hors ligne

#9 Le 11/08/2006, à 14:29

kaworu

Re : [Résolu] Backup via cron

après plusieurs tests perso, voilà la version finale :

#!/bin/bash

### CONNEXION AU SERVEUR ###
server="//SERVER/DOC"
mount_pt="/mnt/foobar"
user="MON_USER"
pass="MON_PASS"
if [ ! -d "$mount_pt" ]; then
    echo -e "\033[1;31m ERREUR : \"$mount_pt\" n'existe pas.\
    \n\033[00mfaire \033[1;32mmkdir -p \"$mount_pt\"\033[00m avec les droit root si besoin est."
    exit 1
fi
smbmount $server $mount_pt -o username=$user,password=$pass,rw
#smbmount $server $mount_pt -o rw
if [ $? -ne 0 ]; then
    echo -e "\033[1;31m ERREUR : problème de connexion au serveur $server\033[00m"
else
    echo -e "\033[1;32m *\033[00m connexion au serveur $server réussie"
fi


sleep 1


### SAUVEGARDE ###
# directory de destination pour tous les backups
backup_dir="$mount_pt/backup"
# nom du dossier de destination en fonction du jour
backup_dir_today="Week_`date +%V/%A_%d`"
# directory source pour le backup
backup_dir_tosave="/home/lamda/foo"
cd "$backup_dir"
if [ "$PWD" != "$backup_dir" ]; then
    echo -e "\033[1;31m ERREUR : Impossible de se déplacer dans \"$backup_dir\" ou n'existe pas \033[00m"
    exit 1
fi
mkdir -p "$backup_dir_today"
if [ -d "$backup_dir_tosave" ] && [ -d "${backup_dir}/${backup_dir_today}" ]; then
    echo -en "\033[1;32m *\033[00m copie de \"$backup_dir_tosave\" dans \"$backup_dir/$backup_dir_today\" : "
    cp -r "${backup_dir_tosave}" "$backup_dir_today/" &>/dev/null
    if [ $? -ne 0 ]; then
        echo -e "\033[01;31mECHEC\033[00m"
        exit 1
    else
        echo -e "\033[01;32mSUCCES\033[00m"
    fi
else
    echo -e "\033[1;31m ERREUR : \"$backup_dir_tosave\" ou \"$backup_dir/$backup_dir_today\" (ou les deux) n'existe(nt) pas \033[00m\
    \nIl y'a peut être eu un problème durant la création de \"$backup_dir_today\""
    exit 1
fi


sleep 1


### DECONNEXION ###
cd
echo -e "\033[1;32m *\033[00m démontage de $mount_pt"
smbumount "$mount_pt"
if [ $? -ne 0 ]; then
    echo -e "\033[1;31m ERREUR : problème au démontage de $mount_pt \033[00m"
    exit 1
fi
echo && sleep 1
date
echo -e "\033[1;32m***\033[00m sauvegarde effectuée \033[1;32m***\033[00m"
exit 0

Si problème/bug , crier wink

Dernière modification par kaworu (Le 11/08/2006, à 14:32)


"There are in order of increasing severity: lies, damn lies, statistics, and computer benchmarks."

Hors ligne

#10 Le 11/08/2006, à 15:46

Ch'Portos

Re : [Résolu] Backup via cron

Alors, je suis paume ... (le noob en moi reprends ses droits ...)

J'ai copie ton code (je te remerci d'ailleurs de t'etre fait ch**r pour moi) dans un fichier dans mon '/home' que j'ai nomme 'backup' (d'ou le nom complet '/home/backup')

Mais maintenant je le lance comment dans cron ? je l'insere comment dans la crontab ?

Merci

Ch'Portos.

Hors ligne

#11 Le 11/08/2006, à 15:59

david2b

Re : [Résolu] Backup via cron

Il faut d'abord le rendre exécutable avec la commande chmod (chmod 755 backup par exemle), ou en modifiant les droits graphiqement .

Ensuite, tu édite ta crontab, avec par exemple crontab -e (ou dans la crontab système avec sudo /etc/crontab) et tu insères une ligne de ce format :
minutes  heure  jour-du-mois mois jour-de-la-semaine user commande

Cette ligne précise à quel mois, jour de la semaine (1-5 par exemple), jour du mois, heure et minute, ta commande va se lancer, et sous quel user.

Par exemple :

0 23 1-15 * 1-5 root /home/moi/backup

Va lancer backup à 23h00 les 15 premiers jours de chaque mois (* pour tous les mois), du lundi au vendredi.
Tu peux le faire graphiquement avec gcrontab ou kcron (installables par synaptic), ça sera plus simple !


D'ailleurs je ne pense que tu aie placé ton script dans /home/backup mais dans /home/tonuser/backup non ?


Ubuntu Gnome 18.04
bépo-typematrix
Registered Linux User #45312.

Hors ligne

#12 Le 11/08/2006, à 16:46

Ch'Portos

Re : [Résolu] Backup via cron

Pour la config des dates dans la crontab, c'est OK.

Par contre ton script me retourne un "ECHEC" lors de la copie des fichiers. Pourtant la copie semble se passer correctement, puisque dans mon dossier destination j'ai tous les fichiers de present ...

A quoi pourrait-il ceci du ?

Ch'Portos.

Hors ligne

#13 Le 11/08/2006, à 17:17

Ch'Portos

Re : [Résolu] Backup via cron

Resolu !

Le probleme venait en fait de la presence de fichier avec des caracteres particuliers dans le nom (des ":").
Ces fichiers supprimes et le code les generant modifie, le script tourne parfaitement.

Merci !

Hors ligne

#14 Le 14/08/2006, à 10:12

Ch'Portos

Re : [Résolu] Backup via cron

Euh, je veux pas paraitre opportun, mais est-ce qu'il y a moyen de compresser avant de copier, car sinon je vais exploser l'espace disque alloué avant la fin de la semaine moi wink

Je connais la commande tar -cvvf /home/administrator/Returns.tar /home/administrator/Returns/,
mais je ne sais pas comment l'intégrer a ton script.

Je modifierais ton script en utilsant la commande mv et non plus cp pour supprimer le .tar de mon repertoire local.

Merci d'avance,
Ch'Portos.

Hors ligne

#15 Le 14/08/2006, à 10:54

Ch'Portos

Re : [Résolu] Backup via cron

Yeepee !
J'ai trouvé !
J'ai commenté les lignes de ton script qui correpondent a la partie que tu as appelé "SAUVEGARDE" (mis a part le "sleep 1" qui correpond a ... je ne sais pas) et j'ai mis la ligne :

tar -czf "$backup_dir/$backup_dir_today.tar.gz" "$backup_dir_tosave"

comme ca il me crée un *.tar.gz (plus petit qu'un *.tar) directement dans le répertoire destination !

Ch'Portos il est content !

Merci !

Hors ligne