7.3. Automatiser les sauvegardes avec cron

Pour automatiser ces tâches, nous allons créer deux scripts maison regroupant les procédures à effectuer.

Dans le répertoire /usr/local/bin/, créez un fichier sauvegarde_site avec le contenu suivant:


  #!/bin/sh
  # sauvegarde des fichiers/repertoires
  # hebdommadaire, sur les 4 dernieres semaines

  # A modifier:
  SOURCE=/var/www
  DESTINATION=/mnt/backup

  DATE=`date +%Y-%m-%d`
  WEEK=`date +%W`
  let "DEL=$WEEK-4"

  # backup de la semaine
  /usr/bin/rdiff-backup $SOURCE $DESTINATION/$WEEK.$DATE

  # efface le backup vieux de 4 semaines
  rm -rf $DESTINATION/$DEL.*
  

Toujours dans le répertoire /usr/local/bin/, créez un fichier sauvegarde_bdd avec le contenu suivant:


  #!/bin/sh
  # sauvegarde des bases de données
  # hebdommadaire, sur les 4 dernieres semaines

  # A modifier:
  USER=root
  PASS=mot_de_passe_sql
  DESTINATION=/mnt/backup

  DATE=`date +%Y-%m-%d`
  WEEK=`date +%W`
  let "DEL=$WEEK-4"

  # backup de la semaine
  mysqldump -u $USER --password=$PASS --all-databases | gzip > $DESTINATION/$WEEK.$DATE.sql.gz
  
  # efface le backup vieux de 4 semaines
  rm -rf $DESTINATION/$DEL.*.sql.gz
  

Assurez-vous que les scripts soient exécutables:


   machine:~# chmod 700 /usr/local/bin/sauvegarde_site
   machine:~# chmod 700 /usr/local/bin/sauvegarde_bdd
  

Pour planifier l'exécution de ces scripts, procédez comme ceci:


   user@machine:~$ su
   Password:
   machine:~# crontab -e
  

Ajoutez ensuite les lignes suivantes:


  # backup des fichiers tous les samedi a 3h00
  0 3 * * 6 /usr/local/bin/sauvegarde_site

  # backup de la base de donnees tous les samedi a 3h00
  0 3 * * 6 /usr/local/bin/sauvegarde_bdd
  

Il vous est également possible d'éditer directement le fichier /var/spool/cron/crontabs/root même si ce n'est pas conseillé (relancez le démon cron après modification).

La syntaxe fonctionne de la manière suivante:


  0 3 * * 6 /usr/local/bin/sauvegarde_site
  | | | | | |
  | | | | | |-----> programme à exécuter
  | | | | |-------> jour de la semaine (0 pour dimanche, 1 pour lundi, etc.)
  | | | |---------> mois (1-12)
  | | |-----------> jour (1-31)
  | |-------------> heure (0-23)
  |---------------> minute (0-59)

  * est une wilcard = toujours "vrai"
  

La commande crontab -l permet de connaître toutes les entrées déjà configurées. La commande crontab -r permet de les effacer.