Vous êtes ici : » Accueil» Linux » Shell Scripts: Sauvegarde automatique site wordpress

Shell Scripts: Sauvegarde automatique site wordpress

(Dernière mise à jour le: 6 juin 2021)

Sauvegardez  et automatiquement vos fichiers ou dossiers, sur linux, c’est extrêmement simpleAvant tout définir sa stratégie de sauvegarde et de définir ce que l’on est prêt à perdre comme données.

Voyons cela.

Définir sa stratégie de sauvegarde

Nous allons prendre un cas concret : Nous avons un serveur “web” à backuper.
Sur ce serveur il y a :

  • Des fichiers dans le répertoire racine de wordpress emp.(/var/www/html)
  • Des bases de données Mysql

Tous les jours, nous allons créer une sauvegarde sous forme de fichier archive pour la base de données  mysql ainsi qu’une archive de nos fichiers qui se trouvent dans </var/www/html>.

Nous envisageons de garder au moins deux fichiers de chaque type de sauvegarde, une ancienne sauvegarde et une ressente, ces fichiers, nous allons les déplacer une un autre serveur, ou tout simplement télécharger localement chez soit sur un ordinateur personnel.

Le script ci-dessous, effectue une sauvegarde journalière du dossier racine de wordpress sans le dossiers uplaods, plus une sauvegarde aussi journalière de la base de données Mysql  et il notifie les administrateurs du site par e-mail.

 #!/bin/bash
#-------------------------------------------------------------------------
## Configuration
   SRC_CODE="<document_root>"
   BACKUP_DIR="/home/<user>/Sauvegarde"
   BACKUP_SQL="wordpress database name"
   PROJECT_NAME="your donain_name"
   ULPLODS_DIR="*wp-content/uploads*"
##-----------------------------------------------------------------------------
## Type de sauvegarde, valeur possible: journalière, hebdomadaire ou mensuelle
## par défaut: true
##-----------------------------------------------------------------------------
   BACKUP_DAILY=true 
   BACKUP_WEEKLY=true
   BACKUP_MONTHLY=true
##-----------------------------------------------------------------------------
## Nopbre de fichiers archives de sauvegarde à conservé sur localement
## par défaut: 1
##-----------------------------------------------------------------------------
   BACKUP_RETENTION_DAILY=1
   BACKUP_RETENTION_WEEKLY=1
   BACKUP_RETENTION_MONTHLY=1
##----------------------------------------------------------------------------- 
## Type de sauvegarde, valeur possible: journalière, hebdomadaire ou mensuelle 
## Options disponibles : 'local-only' | 'remote-only' | 'local-remote' 
## Par défaut : local-only
##-----------------------------------------------------------------------------
   BACKUP_MODE='local-only' 
##----------------------------------------------------------------------------- 
 
   BACKUP_TIME=`date +%T`
   EXIT_CODE=0
   MONTH=`date +%d`
   DAYWEEK=`date +%u`

##-----------------------------------------------------------------------------
## Calculer le type de sauvegarde selon la date actuelle
##-----------------------------------------------------------------------------

if [ "$MONTH" -eq 1 -a "$BACKUP_MONTHLY" == true ]; then FN='monthly'
  elif [ "$DAYWEEK" -eq 7 -a "$BACKUP_WEEKLY" == true ]; then FN='weekly'
  elif [ "$DAYWEEK" -lt 7 -a "$BACKUP_DAILY" == true ]; then FN='daily'
fi

DATE=$FN-`date +"%Y%m%d"`
DATEJ=`date +"%d/%m/%Y"`

EXIT_CODE=$?

function local_only {
zip -r $BACKUP_DIR/$PROJECT_NAME-htdocs-$DATE.zip $SRC_CODE -x $ULPLODS_DIR > /dev/null 2>&1
mysqldump -u root --databases $BACKUP_SQL | zip -r > $BACKUP_DIR/$PROJECT_NAME-mysql-$DATE.sql.zip 
cd $BACKUP_DIR/
## Supression des anciennes sauvegardes ou mise à jours
ls -t | grep $PROJECT_NAME | grep htdocs | grep daily | sed -e 1,"$BACKUP_RETENTION_DAILY"d | xargs -d '\n' rm -R > /dev/null 2>&1
ls -t | grep $PROJECT_NAME | grep htdocs | grep weekly | sed -e 1,"$BACKUP_RETENTION_WEEKLY"d | xargs -d '\n' rm -R > /dev/null 2>&1
ls -t | grep $PROJECT_NAME | grep htdocs | grep monthly | sed -e 1,"$BACKUP_RETENTION_MONTHLY"d | xargs -d '\n' rm -R > /dev/null 2>&1
ls -t | grep $PROJECT_NAME | grep mysql | grep daily | sed -e 1,"$BACKUP_RETENTION_DAILY"d | xargs -d '\n' rm -R > /dev/null 2>&1 
ls -t | grep $PROJECT_NAME | grep mysql | grep weekly | sed -e 1,"$BACKUP_RETENTION_WEEKLY"d | xargs -d '\n' rm -R > /dev/null 2>&1 
ls -t | grep$PROJECT_NAME  | grep mysql | grep monthly | sed -e 1,"$BACKUP_RETENTION_MONTHLY"d | xargs -d '\n' rm -R > /dev/null 2>&1
}

local_only

## Calcule de la taile des fichiers

FILESIZE0=$(stat -c%s $BACKUP_DIR/$PROJECT_NAME-htdocs-$DATE.zip)
FILESIZE1=$(stat -c%s $BACKUP_DIR/$PROJECT_NAME-mysql-$DATE.sql.zip)

  ##-----------------------------------------------------------------------------
  ## Notification par email destinée auà l'administrateur du site
  ## SUCCES : Envoyer l'email en utilisant la commande mail
  ##----------------------------------------------------------------------------- 
if [ "$EXIT_CODE" -eq 0 ]; then
   # Création du message : text/html
   from="wordpress<ne-pas-repondre@domain.com>"
   to="admin@domaine.com>"
   subject="Notification de sauvegarde du $DATEJ à $BACKUP_TIME"
   body="<p>Bonjour, Admin <br>
   Le système vient de d'effectuer une sauvegarde, complette de votre site <b>$PROJECT_NAME</b>.<br>
   Trouvrez ci-dessous 2 archives (Zip), disponibles en téléchargement.<br>
   Les fichiers archives de la sauvegarde se trouvent dans: $BACKUP_DIR </p>
   <h3>Sauvegarde du $DATEJ à $BACKUP_TIME </h3>
   <ul>
      <li>Site webs: $PROJECT_NAME-htdocs-$DATE.zip> , <span style='color:red'> `expr $FILESIZE0 / 1000` Ko, </span></li>
      <li>Base de données: $PROJECT_NAME-mysql-$DATE.sql.zip , <span style='color:red'> `expr $FILESIZE1 / 1000` Ko</span></li>
   </ul>"
    echo $body | mail -a "Content-Type: text/html" -s "$subject" -r "$from" "$to"
else
   ##-----------------------------------------------------------------------------
   ## ERREUR : Envoyer l'email en utilisant la commande mail
   ##----------------------------------------------------------------------------- 
    from="wordpress<ne-pas-repondre@domain.com>" 
    to="admin@domaine.com>" 
    subject="Notification d'erreur"
    errormessage="<p>Bonjour, Admin <br>
    Une erreur est survenue pendant la sauvegarde automatique de votre site. <br>
    Consulter les fichiers logs, pour plus de détails. <br>
    La procédure s'est arrêter avec le code : ${EXIT_CODE} </p>" 
    echo $errormessage | mail -a "Content-Type: text/html" -s "$subject" -r "$from" "$to"
fi
exit $exit_code

Pour assurer l’exécution quotidiennement, copier le script dans le dossier </etc/cron.daily>, et rendez le exécutable :

 chmod -x /etc/cron.daily/<notre-script.sh>

Laisser un commentaire

Translate »