Script shell de sauvegarde automatique de comptes web
Tatane |
mardi 19 juillet 2005 à 13:38 |
Debian |
#5 |
RSS
Cet article présente la réalisation d'un script shell permettant de sauvegarder tous les comptes web d'un serveur et de les transférer par FTP sur un serveur distant.
Ce script a été initialement réalisé sur un serveur tournant sous GNU/Linux Debian Woody.
Il permet de sauvegarder tous les sites d'un serveur mutualisé, sachant que chaque Virtual Host d'Apache pointe sur un dossier situé dans /var/www.
Aprés chaque sauvegarde on effacera l'ancienne sauvegarde de la semaine précédente.
Paramétrage du script
La première partie consiste à définir les différentes variables du script:
- Configuration du FTP
- Configuration des noms de fichiers de backup
# Configuration du FTP distant loginftp=votre_login passftp=votre_mdp hostftp=adresse_du_serveur_ftp # Racine WWW www=/var/www # Date du jour date=`date '+%d-%m-%Y'` # Date d'il y a 7 jours date2=`date --date '7 days ago' "+%d-%m-%Y"`
Création des archives tar.gz
Ensuite le script va boucler sur tous les répertoires (sites) contenus dans /var/www et compresser chaque site dans une archive unique qui sera placé dans le répertoire /home/administrateur/backup.
Sous entendu vous avez un utilisateur nommé "Administrateur" qui a un répertoire "backup" dans son home, à adapter suivant vos besoins ...
# Boucle sur tous les comptes Web for rep in `ls $www`; do if [ -d $www/$rep ]; then tar -czf /home/administrateur/backup/backup_$rep\_$date.tar.gz $www/$rep/www echo Tar.gz de $rep OK fi done
Transfert des archives
Maintenant que chaque site a été sauvegardé proprement dans une archive, il suffit de transférer ces fichiers sur un serveur FTP pour plus de sécurité.
Après chaque transfert de fichier le script va vérifier, grace à la date contenue dans le nom du fichier, si une version datant de 7 jours existe, si c'est le cas on l'efface afin de ne pas surcharger le serveur de fichiers plus ou moins volumineux.
Afin d'effectuer le transfert FTP, j'utilise ici un client FTP en ligne de commande : NcFTP.
# Boucle sur tous les comptes Web for rep in `ls $www`; do if [ -d $www/$rep ]; then fileToTransfert=/home/administrateur/backup/backup_$rep\_$date.tar.gz fileToDel=/home/administrateur/backup/backup_$rep\_$date2.tar.gz # Transfert FTP ncftpput -u $loginftp -p $passftp $hostftp / $fileToTransfert echo Transfert FTP de backup_$rep\_$date.tar.gz OK # Effacement du backup de la semaine d'avant if [ -f $fileToDel ]; then rm $fileToDel echo $fileToDel effac? fi fi done
Crontab
Le script est maintenant terminé, il suffit de paramétrer la crontab afin de le lancer quotidiennement:
crontab -e 00 05 * * * /home/blabla/backup.sh > backup_log.log
Script complet
#!/bin/sh #---------------------------------------------------------------# # Script de backup des répertoires web de *** # Author: Stéphane MUNOS # Date: 20 octobre 2004 # # N?cessite le client FTP NCFTP # #apt-get install ncftp # # Crontab / tous les jours ? 00h05 # #crontab -e # # 00 05 * * * /home/blabla/backup.sh #---------------------------------------------------------------# #----- Paramétrage du script ----- # Configuration du FTP distant loginftp=login passftp=pass hostftp=ip # Racine WWW www=/var/www # Date du jour date=`date '+%d-%m-%Y'` # Date d'il y a 7 jours date2=`date --date '7 days ago' "+%d-%m-%Y"` #---------- Lancement du script ---------- clear echo `date` echo '### Backup des répertoires web ###' echo #---------- Création des archives tar.gz ---------- # Boucle sur tous les comptes Web for rep in `ls $www`; do if [ -d $www/$rep ]; then tar -czf /home/administrateur/backup/backup_$rep\_$date.tar.gz $www/$rep/www echo Tar.gz de $rep terminé fi done echo echo '### Backup terminé ###' echo echo echo '### Transfert des backups par FTP ###' echo #---------- Transfert des archives ---------- # Boucle sur tous les comptes Web for rep in `ls $www`; do if [ -d $www/$rep ]; then fileToTransfert=/home/administrateur/backup/backup_$rep\_$date.tar.gz fileToDel=/home/administrateur/backup/backup_$rep\_$date2.tar.gz # Transfert FTP ncftpput -u $loginftp -p $passftp $hostftp / $fileToTransfert echo Transfert FTP de backup_$rep\_$date.tar.gz terminé # Effacement du backup de la semaine dernière if [ -f $fileToDel ]; then rm $fileToDel echo $fileToDel effacé fi fi done echo echo '### Transferts terminés ###' echo
Conclusion
Ce script peut bien evidemment être adapté à votre guise, notamment en incluant dans le tar.gz un dump de votre SGBD.
Vos commentaires sont les bienvenus !
EDIT 04-08-2005 :
j'ai rajouté la ligne pour le dump SQL avant de faire le tar.gz du Virtual Host :
A rajouter en début de script :
# Password root mysql $passrootmysql=votrepassrootmysql
A rajouter dans la boucle de création des archives :
# dump sql du compte fileDumpSql=$www/$rep/dumpsql_$rep\_$date.sql /usr/bin/mysqldump $rep --user=root --password=passrootmysql -r "$fileDumpSql" tar -czf /home/administrateur ...
et voilà, avec ça vous un backup complet de votre site (fichiers + bdd) !

Commentaires
1. Le mardi 19 juillet 2005 à 17:59, par NiKo
2. Le mardi 19 juillet 2005 à 18:03, par Tatane
3. Le mardi 19 juillet 2005 à 22:55, par NiKo
4. Le mardi 18 octobre 2005 à 09:53, par Thanh
5. Le mardi 31 janvier 2006 à 14:12, par chris
6. Le mardi 31 janvier 2006 à 14:54, par Tatane
7. Le mardi 31 janvier 2006 à 15:31, par chris
8. Le mercredi 6 septembre 2006 à 21:24, par Horde
9. Le lundi 16 avril 2007 à 10:04, par alex
Ajouter un commentaire
Les commentaires pour ce billet sont fermés.