/home/zergy

There are no place like ::1 (Oui, ici, on est moderne, on utilise IPv6)

Quelques scripts personnels

Rédigé par Zergy Aucun commentaire

L'informatique, c'est pour les fainéant, c'est pas pour rien qu'on a des scripts pour tout. :)

Sauvegarde de bases de données MySQL/MariaDB

Les sauvegardes de base de données ne sont pas toujours simple à effectuer, voici un petit script qui vous mâchera le travail.

S'il est possible de sauvegarder les bases de données de MySQL en se contentant de copier les fichiers contenant les bases, cette méthode est crado et peut se solder par un échec cuisant.
Il est largement recommandé d'utiliser l'utilitaire mysqldump pour cette tâche, cependant, l'utiliser manuellement pour sauvegarder les bases de données une à une n'est pas agréable, un oubli ou une mauvaise manipulation est vite arrivée.

Voici donc un petit script à utiliser avec cron pour sauvegarder toutes vos bases de données MySQL automatiquement.

A modifier selon votre convenance, attention, les droits de root sont nécessaires.

La présence du mot de passe root de MySQL dans le fichier de configuration demande de mettre les droits les plus restrictifs possible sur celui-ci.

Script principal

  • Language : Bash UNIX
  • Emplacement par défaut : /usr/local/sbin/mysql-dump
  • Droits par défaut : root:root 700
#! /usr/bin/env bash

################################################################################
#                                                                              #
# LICENCE                                                                      #
#                                                                              #
# This program is free software: you can redistribute it and/or modify it      #
# under the terms of the GNU General Public License as published by the Free   #
# Software Foundation, either version 3 of the License, or (at your option)    #
# any later version.                                                           #
#                                                                              #
# This program is distributed in the hope that it will be useful, but WITHOUT  #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or        #
# FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for     #
# more details.                                                                #
#                                                                              #
# You should have received a copy of the GNU General Public License along with #
# this program.                                                                #
#                                                                              #
################################################################################

################################################################################
#                                                                              #
# DESCRIPTION                                                                  #
#                                                                              #
# Ce script sauvegarde automatiquement les bases de données MySQL/MariaDB en   #
# utilisant la sauvegarde par base.                                            #
#                                                                              #
#                                                                              #
# VARIABLES                                                                    #
#                                                                              #
# - COMPRESSION_METHOD : Algorythme de compression utilisé pour l'archivage,   #
#   peu être bzip2, gzip, lzma ou xz.                                          #
# - DATE : Date du jour, utilisé pour le dossier de sauvegarde des bases de    #
#   données à sauvegarder.                                                     #
# - MYSQLROOT : Nom de l'administrateur du système de gestion de bases de      #
#   données, root par défaut.                                                  #
# - MYSQLPASSWD : Mot de passe de l'administrateur du système de gestion de    #
#   base de données.                                                           #
# - BACKUP_DIR : Emplacement du répertoire de base pour les sauvegarde, un     #
#   sous-répertoire portant pour nom la variable date sera crée pour contenir  #
#   les sauvegarde du jour.                                                    #
# - LOG_FILE : Fichier utilisé pour la journalisation.                         #
# - LOG_FILE_DATE : Date de journalisation.                                    #
# - RETENTION : Temps de rétention des sauvegardes.                            #
# - MYSQLDUMP_OPTS : Options utilisées par la commande mysqldump.              #
#                                                                              #
#                                                                              #
# FONCTIONS                                                                    #
#                                                                              #
# - logDate() : Ajoute la date aux messages de journalisation.                 #
# - createLog() : Créer un fichier de journalisation et lui donne les droits   #
#   corrects s'il n'existe pas.                                                #
# - createBackupDir() : Vérifie l'existance du répertoire utilisé par les      #
#   sauvegardes du jour, le crée et lui donne les authorisations correctes le  #
#   cas échéant. Voir les variables BACKUP_DIR et DATE.                        #
#   Quitte et retourne l'état de sortie 1 si le dossier n'existe pas et ne     #
#   peut être crée.                                                            #
# - backupPurge() : Utilise la commande tmpreaper pour suprimmer dans le       #
#   dossier de base des sauvegardes -tel que défini par la variable            #
#   BACKUP_DIR- celles dont l'âge est supérieur à celui défini dans la         #
#   variable RETENTION.                                                        #
#   Quitte et retourne l'état de sortie 2 si les sauvegardes les plus          #
#   anciennes ne peuvent être supprimées.                                      #
# - listDB() : Cette fonction liste les bases de données présentes avec la     #
#   commande mysql pour lister les bases de données présentent dans le système #
#   de base de données que l'on souhaite sauvegarder.                          #
#   Quitte et retourne l'état de sortie 3 si les bases de données ne peuvent   #
#   êtres listées                                                              #
#   Quitte et retourne l'état de sortie 4 si aucunes bases de données          #
#   n'existe.                                                                  #
# - backupDB() : Supprime les sauvegardes présente dans le dossier du jour     #
#   s'ils en existes puis utilise mysql afin de sauvegarder les bases de       #
#   données du système de gestion de base de données que l'on souhaite         #
#   sauvegarder.                                                               #
#   Il est possible de spécifier des options à la commande de sauvegarde via   #
#   la variables MYSQLDUMP_OPTS.                                               #
#   Quitte est retourne l'état de sortie 5 si une erreur se produit lors des   #
#   sauvegardes.                                                               #
# - backupCheck() : Cette fonction effectue un test afin de savoir si les      #
#   sauvegardes se sont bien déroulées. Elle vérifie via la commande find      #
#   couplé à la commande wc -l la présence de fichier dans le répertoire de    #
#   sauvegarde du jour, si le résultat de cette commande est est plus grand    #
#   que 0, elle utilise la commande du -ks si la taille totales des fichiers   #
#   sauvegardé est supérieur à quatre kibi-octects, 4 kio étant la taille d'un #
#   dossier vide ou contenant des fichiers de taille nulle.                    #
#   Quitte et retourne l'état de sortie 6 si aucune sauvegarde n'a put être    #
#   effectuée ou si la taille des sauvegardes est nulle.                       #
#                                                                              #
#                                                                              #
# AUTEUR(S)                                                                    #
#                                                                              #
# - Zergy (zergy@zergy.net)                                                    #
#                                                                              #
################################################################################

# Variables
SHELL="/bin/bash";
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin";

source "/usr/local/etc/mysql-dump.conf";

# Détermination de l'extension en fonction de la méthode de compression
case $COMPRESSION_METHOD in
	bzip2)
		COMPRESSION_EXTENSION="bz2";
		;;
	gzip)
		COMPRESSION_EXTENSION="gz";
		;;
	lzma)
		COMPRESSION_EXTENSION="lz";
		;;
	xz)
		COMPRESSION_EXTENSION="xz";
		;;
esac;

# Routine d'horodatage des logs
function logDate() {
        LOG_FILE_DATE="$(date +'%d/%m/%Y %H:%M')";
}

# Mise en place des journaux.
function createLog () {
        if [ ! -f "$LOG_FILE" ]; then
                touch "$LOG_FILE";
                chown mysql "$LOG_FILE";
                chgrp adm "$LOG_FILE";
                chmod 640 "$LOG_FILE";
        fi
}

# Mise en place des répertoires.
function createBackupDir () {
        if [ ! -d "$BACKUP_DIR/$DATE" ]; then
                mkdir -p "$BACKUP_DIR/$DATE";
                if [ $? != 0 ]; then
                        logDate;
                        echo "$LOG_FILE_DATE : Impossible de créer le dossier \
de sauvegarde." >> "$LOG_FILE";
                        exit 1;
                fi
                chown root "$BACKUP_DIR/$DATE";
                chgrp backup "$BACKUP_DIR/$DATE";
                chmod 770 "$BACKUP_DIR/$DATE";
        fi
}

# Purge des ancienne sauvegardes.
# Utilisation TMPReaper pour supprimer les sauvegardes vielles de plus de 8
# jours (cf $RETENTION pour changer)
function backupPurge() {
        tmpreaper "$RETENTION" "$BACKUP_DIR";
        if [ $? != "0" ]; then
                logDate;
                echo "$LOG_FILE_DATE : Impossible de purger les anciennes \
sauvegardes." >> "$LOG_FILE";
                exit 2;
        fi
        for olddir in $(ls "$BACKUP_DIR"); do
                if [ "$(du -ks $BACKUP_DIR/$olddir | awk {'print $1'})" -eq 4 ]
                then
                        rmdir "$BACKUP_DIR/$olddir";
                fi
        done
}

# Listage des bases de données.
function listDB() {
        BASE_LIST="$(mysql --user=$MYSQLROOT --password=$MYSQLPASSWD \
--batch --skip-column-names --execute='SHOW DATABASES;')";
        if [ $? != "0" ]; then
                logDate;
                echo "$LOG_FILE_DATE : Erreur dans la commande de sauvegarde." \
>> "$LOG_FILE";
                exit 3;
        fi
        if [ "$BASE_LIST" = "" ]; then
                logDate;
                echo "$LOG_FILE_DATE : Aucune base présente." >> "$LOG_FILE";
                exit 4;
        fi
}

# Sauvegarde des BDD.
function backupDB() {
        for db in $BASE_LIST; do
                if [ -f "$BACKUP_DIR/$DATE/$db.sql.$COMPRESSION_EXTENSION" ]; then
                        rm -f "$BACKUP_DIR/$DATE/$db.sql.$COMPRESSION_EXTENSION";
                fi
                mysqldump $MYSQLDUMP_OPTS --user="$MYSQLROOT" \
--password="$MYSQLPASSWD" "$db" 2>> "$LOG_FILE" | $COMPRESSION_METHOD -c\
> "$BACKUP_DIR/$DATE/$db.sql.$COMPRESSION_EXTENSION";
                if [ $? -ne "0" ]; then
                        logDate;
                        echo "$LOG_FILE_DATE : Attention erreur dans les \
sauvegardes."  >> "$LOG_FILE";
                        exit 5;
                fi
                chown root "$BACKUP_DIR/$DATE/$db.sql.$COMPRESSION_EXTENSION";
                chgrp backup "$BACKUP_DIR/$DATE/$db.sql.$COMPRESSION_EXTENSION";
                chmod 660 "$BACKUP_DIR/$DATE/$db.sql.$COMPRESSION_EXTENSION";
        done
}

# Vérificarion des sauvegardes.
function backupCheck() {
        if [ "$(find $BACKUP_DIR/$DATE -type f | wc -l)" -gt 0 -a \
"$(du -ks $BACKUP_DIR/$DATE | awk {'print $1'})" -gt 4 ]; then
                logDate;
                echo "$LOG_FILE_DATE : Sauvegarde des bases terminé avec \
succés." >> "$LOG_FILE";
        else
                logDate;
                echo "$LOG_FILE_DATE : Aucune base sauvegardées ou leur taille \
est de zéro." >> "$LOG_FILE";
                exit 6;
        fi
}

function main() {
        createLog;
        createBackupDir;
        listDB;
        backupDB;
        backupCheck;
        backupPurge;
}

main;

exit 0;

Fichier de configuration

  • Language : Bash UNIX
  • Emplacement par défaut : /usr/local/etc/mysql-dump.conf
  • Droits par défaut : root:root 600
# Root directory for backups.
BACKUP_DIR="/var/archives/MySQL";

# Date format, used to name the backup directory.
DATE="$(date '+%Y%m%d')";

# MySQL user used for backup.
MYSQLROOT="root";
MYSQLPASSWD="ROOTPASSWD";

# Retention time.
RETENTION="7d";

# Compression method, can be bzip2, gzip, lzma or xz
COMPRESSION_METHOD="xz"

# MySQL options.
MYSQLDUMP_OPTS="--routines --skip-lock-tables --events";

# Log file.
LOG_FILE="/var/log/mysql-dump.log";

Sauvegardes des Packages

Un petit script permettant, sous Debian ou distributions dérivées, de sauvegarder la liste des paquets installés, très pratique pour ne rien oublier lors d'une réinstallation.

Les paquets sauvegardé via ce script peuvent être réinstallés de la façon suivantes :

$ sudo dpkg --set-selections < ./YYYYMMDD-Packages.list
$ sudo apt-get update
$ sudo apt-get dselect-upgrade

Script principal

  • Language : Bash UNIX
  • Emplacement par défaut : /usr/local/sbin/packages-backup
  • Droits par défaut : root:root 700
#! /usr/bin/env bash
 
################################################################################
#                                                                              #
# LICENCE                                                                      #
#                                                                              #
# This program is free software: you can redistribute it and/or modify it under#
# the terms of the GNU General Public License as published by the Free Software#
# Foundation, either version 3 of the License, or (at your option) any later   #
# version.                                                                     #
#                                                                              #
# This program is distributed in the hope that it will be useful, but WITHOUT  #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS#
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details#
#                                                                              #
# You should have received a copy of the GNU General Public License along with #
# this program.                                                                #
#                                                                              #
################################################################################
 
################################################################################
#                                                                              #
# DESCRIPTION                                                                  #
#                                                                              #
# Ce script permet de rapidement créer une liste des packages installés.       #
#                                                                              #
#                                                                              #
# VARIABLES                                                                    #
#                                                                              #
# - DATE : Date du jour, utilisé pour nommer le ficher de sauvegarde contenant #
#   la liste des packages à sauvegarder.                                       #
# - BACKUP_DIR : Emplacement du répertoire de base pour les sauvegarde         #
# - LOG_FILE : Fichier utilisé pour la journalisation.                         #
# - LOG_FILE_DATE : Date de journalisation.                                    #
# - RETENTION : Temps de rétention des sauvegardes.                            #
#                                                                              #
#                                                                              #
# FONCTIONS                                                                    #
#                                                                              #
# - logDate() : Ajoute la date aux messages de journalisation.                 #
# - createLog() : Créer un fichier de journalisation et lui donne les droits   #
#   corrects s'il n'existe pas.                                                #
# - createBackupDir() : Vérifie l'existance du répertoire utilisé par les      #
#   sauvegardes du jour, le crée et lui donne les authorisations correctes le  #
#   cas échéant. Voir les variables BACKUP_DIR et DATE.                        #
#   Quitte et retourne l'état de sortie 1 si le dossier n'existe pas et ne peut#
#   être crée.                                                                 #
# - backupPurge() : Utilise la commande tmpreaper pour suprimmer dans le       #
#   dossier de base des sauvegardes -tel que défini par la variable BACKUP_DIR-#
#   celles dont l'âge est supérieur à celui défini dans la variable RETENTION. #
#   Quitte et retourne l'état de sortie 2 si les sauvegardes les plus anciennes#
#   ne peuvent être supprimées.                                                #
# - backup() : Cette fonction crée un fichier contenant la liste des packages  #
#   Quitte et retourne l'état de sortie 3 si une erreur est rencontrée lors de #
#   l'archivage.                                                               #
# - backupCheck() : Cette fonction effectue un test afin de savoir si la       #
#   sauvegarde s'est bien déroulées. Elle vérifie via la commande du -ks si la #
#   taille totale du fichier supérieur à 0.                                    #
#   Quitte et retourne l'état de sortie 4 si aucune sauvegarde n'a put être    #
#   effectuée ou si la taille des sauvegardes est nulle.                       #
#                                                                              #
#                                                                              #
# AUTEUR(S)                                                                    #
#                                                                              #
# - Zergy (zergy@zergy.net)                                                    #
#                                                                              #
################################################################################
 
# Variables
SHELL="/bin/bash";
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin";
 
source "/usr/local/etc/packages-backup.conf";
 
# Routine d'horodatage des logs
function logDate() {
        LOG_FILE_DATE="$(date +'%d/%m/%Y\ %H:%M')";
}
 
# Mise en place des journaux.
function createLog() {
        if [ ! -f "$LOG_FILE" ]; then
                touch "$LOG_FILE";
                chown root "$LOG_FILE";
                chgrp adm "$LOG_FILE";
                chmod 640 "$LOG_FILE";
        fi
}
 
# Mise en place des répertoires.
function createBackupDir() {
        if [ ! -d "$BACKUP_DIR" ]; then
                mkdir --parents "$BACKUP_DIR";
                if [ $? != 0 ]; then
                        logDate;
                        echo "$LOG_FILE_DATE : Impossible de créer le dossier de sauvegarde." >> "$LOG_FILE";
                        exit 1;
                fi
                chown root "$BACKUP_DIR";
                chgrp backup "$BACKUP_DIR";
                chmod 770 "$BACKUP_DIR";
        fi
}
 
# Purge des ancienne sauvegardes.
# Utilisation TMPReaper pour supprimer les sauvegardes vielles de plus de 49 jours (cf $RETENTION pour changer)
function backupPurge() {
        tmpreaper -m "$RETENTION" "$BACKUP_DIR";
        if [ $? != "0" ]; then
                logDate;
                echo "$LOG_FILE_DATE : Impossible de purger les anciennes sauvegardes." >> "$LOG_FILE";
                exit 2;
        fi
}
 
# Fonction de sauvegarde
function backup() {
        dpkg --get-selections > "$BACKUP_DIR/$DATE-Packages.list";
        if [ $? != 0 ]; then
                logDate;
                echo "$LOG_FILE_DATE : Impossible de créer la liste des packages." >> "$LOG_FILE";
                exit 3;
        fi
        chown root "$BACKUP_DIR/$DATE-Packages.list";
        chgrp backup "$BACKUP_DIR/$DATE-Packages.list";
        chmod 660 "$BACKUP_DIR/$DATE-Packages.list";
}
 
# Vérificarion des sauvegardes.
function backupCheck() {
        if [ "$(du -ks "$BACKUP_DIR/$DATE-Packages.list" | awk {'print $1'})" -gt 0 ]; then
                logDate;
                echo "$LOG_FILE_DATE : Sauvegarde terminée avec succés." >> "$LOG_FILE";
        else
                logDate;
                echo "$LOG_FILE_DATE : Aucune sauvegarde ou leur taille est de zéro." >> "$LOG_FILE";
                exit 4;
        fi
}
 
function main() {
        createLog;
        createBackupDir;
        backup;
        backupCheck;
        backupPurge;
}
 
main;
 
exit 0;

Fichier de configuration

  • Language : Bash UNIX
  • Emplacement par défaut : /usr/local/etc/packages-backup.conf
  • Droits par défaut : root:root 600
# Date format, used to name the backup directory
DATE="$(date '+%Y%m%d')"

# Backup directory
BACKUP_DIR="/var/archives/Packages"

# Log file
LOG_FILE="/var/log/packages-backup.log"

# Retention time
RETENTION="49d"

RSync de dossier personnel

Un petit script me permettant de rapidement sauvegarder ou restaurer mon dossier personnel via RSync. Sans doute améliorable.

La présence du mot de passe utilisé pour RSync dans le fichier de configuration demande de mettre les droits les plus restrictifs possible sur celui-ci.

Script principal

  • Language : Bash UNIX
  • Emplacement par défaut : /usr/local/bin/rsync-home
  • Droits par défaut : root:root 700
#! /usr/bin/env bash
 
#################################################################################
#                                                                               #
# LICENCE                                                                       #
#                                                                               #
# This program is free software: you can redistribute it and/or modify it under #
# the terms of the GNU General Public License as published by the Free Software #
# Foundation, either version 3 of the License, or (at your option) any later    #
# version.                                                                      #
#                                                                               #
# This program is distributed in the hope that it will be useful, but WITHOUT   #
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS #
# FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details.#
#                                                                               #
# You should have received a copy of the GNU General Public License along with  #
# this program.  If not, see .                #
#                                                                               #
#################################################################################
 
#################################################################################
#                                                                               #
# DESCRIPTION                                                                   #
#                                                                               #
# Ce script permet de sauvegarder le dossier personnel d'un utilisateur sur un  #
# un serveur via RSync.                                                         #
#                                                                               #
#                                                                               #
# VARIABLES                                                                     #
#                                                                               #
# - DATE : Date du jour, utilisé pour nommer les fichers de journaux qui seront #
#   evonyés par courriel.                                                       #
# - EXCLUDE_LIST : Liste des répertoire et fichiers à ignorer.                  #
# - INCLUDE_LIST : Liste des répertoire et fichiers à copier même s'ils sont    #
#   dans des dossier à ignorer.                                                 #
# - RSYNC_OPTS : Options RSync. Actualisé pour prendre en compte les fichiers   #
#   $EXCLUDE_FILE et $FILTERS_FILES s'ils existent.                             #
# - SERVER : Serveur RSync. Utiliser le format "Utilisateur@Serveur"            #
# - VIRTUAL_DIR : Répertoire RSync virtuel.                                     #
# - RSYNC_PASSWORD : Mot de passe RSync, A utiliser pour chaque commande RSync. #
# - MAIL_ADDRESS : Adresse courriel où le résultat de sauvegarde ou restauration#
#   doit être envoyé.                                                           #
#                                                                               #
#                                                                               #
# FONCTIONS                                                                     #
#                                                                               #
# - backup() : Exécute les commandes RSync de copie vers le serveur. Chaque     #
#   commandes copie le dossier local voulu vers le répertoire virtuel           #
#   $VIRTUAL_DIR du serveur $RSYNC_USER@$RSYNC_SERVER en prenant en compte les  #
#   options $RSYNC_OPTS. Les journaux envoyés vers vers $ACTION.log et les      #
#   erreurs vers $ACTION.err.                                                   #
# - restore() : Exécute les commandes RSync de restauration depuis le serveur.  #
#   Chaque commandes copie le répertoire virtuel $VIRTUAL_DIR du serveur        #
#   $RSYNC_USER@$RSYNC_SERVER en prenant en compte les options $RSYNC_OPTS vers #
#   le dossier local voulu.                                                     #
#   Les journaux envoyés vers vers $ACTION.log et les erreurs vers              #
#   $ACTION.err.                                                                #
#                                                                               #
#                                                                               #
# AUTEUR(S)                                                                     #
#                                                                               #
# - Collyer Cédric                                    #
#                                                                               #
#                                                                               #
# DERNIER(S) CHANGEMENT(S)                                                      #
#                                                                               #
# - 09/05/2016 : Écriture de la documentation.                                  #
#                                                                               #
#################################################################################
 
# Variables
PATH="/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin";
 
source "$HOME/.config/rsync-home.conf";
 
VIRTUAL_DIR="$USER$VIRTUAL_DIR";
 
# Création du répertoire de journaux
function createLogDir () {
        if [ ! -d "$LOG_DIR" ]; then
                mkdir --parent "$LOG_DIR";
        fi
}
 
# Gestion des erreurs
function errorCheck() {
	if [ $? == 0 ]; then
		echo -e "\t\033[01;32mOK\033[00m";
	else
		ERROR_CODE="$1";
		ERROR_MESSAGE="$2";
 
		echo -e "\t\033[01;31mErreur\033[00m";
		echo -e "$ERROR_MESSAGE"
 
		if [ $ERROR_CODE != "-1" ]; then
			exit $ERROR_CODE;
		fi
	fi
}
 
# Test de présence du serveur
function pingServer() {
	echo -en "\n- Ping de $RSYNC_SERVER...";
	ping -6 -c 1 -q "$RSYNC_SERVER" > /dev/null 2>&1;
	errorCheck 1 "  $RSYNC_SERVER n'est pas joignable.";
}
 
# Construction de la liste des exclusion
function buildExcludeList() {
	EXCLUDE_COUNT=$(echo "$EXCLUDE_LIST" | wc -w);
 
	for exclude_number in $(seq 1 $EXCLUDE_COUNT); do
		current_exclude=$(echo "$EXCLUDE_LIST" | cut -d' ' -f$exclude_number);
		RSYNC_OPTS="$RSYNC_OPTS --exclude=$current_exclude";
	done;
}
 
# Construction de la listes des inclusions
function buildIncludeList() {
	INCLUDE_COUNT=$(echo "$INCLUDE_LIST" | wc -w);
 
	for include_number in $(seq 1 $INCLUDE_COUNT); do
		current_include=$(echo "$INCLUDE_LIST" | cut -d' ' -f$include_number);
		RSYNC_OPTS="$RSYNC_OPTS --include=$current_include";
	done;
}
 
# Fonction de sauvegarde
function backup() {
	pingServer;
	createLogDir;
	buildIncludeList;
	buildExcludeList;
 
	echo -en "- Sauvegarde de $HOME/ sur $RSYNC_SERVER::$VIRTUAL_DIR...";
	RSYNC_PASSWORD="$RSYNC_PASSWORD" rsync $RSYNC_OPTS "$HOME/" "$RSYNC_USER@$RSYNC_SERVER::$VIRTUAL_DIR" > "$LOG_DIR/$ACTION.log" 2> "$LOG_DIR/$ACTION.err";
	errorCheck -1 "  Erreur lors de la sauvegarde."
 
	mailResult;
}
 
# Fonction de restoration
function restore() {
	pingServer;
	createLogDir;
	buildIncludeList;
	buildExcludeList;
 
	echo -en "- Restauration de $HOME/ depuis $RSYNC_SERVER::$VIRTUAL_DIR...";
	RSYNC_PASSWORD="$RSYNC_PASSWORD" rsync $RSYNC_OPTS "$RSYNC_USER@$RSYNC_SERVER::$VIRTUAL_DIR" "$HOME/" > "$LOG_DIR/$ACTION.log" 2> "$LOG_DIR/$ACTION.err";
	errorCheck -1 "  Erreur lors de la restauration."
 
	mailResult;
}
 
# Envoi des résultats
function mailResult() {
	if [ -s "$LOG_DIR/$ACTION.err" ]; then
		case "$ACTION" in
			'backup')
				MESSAGE="Erreurs lors de sauvegarde du VirtualDir $VIRTUAL_DIR de $HOSTNAME vers $RSYNC_SERVER.\n\n$(cat "$LOG_DIR/$ACTION.err")";
				SUBJECT="RSync-Home Erreur (Sauvegarde $VIRTUAL_DIR $RSYNC_SERVER -> $HOSTNAME)";
				;;
			'restore')
				MESSAGE="Erreurs lors de restauration du VirtualDir $VIRTUAL_DIT de $RSYNC_SERVER vers $HOSTNAME.\n\n$(cat "$LOG_DIR/$ACTION.err")";
				SUBJECT="RSync-Home Erreur (Restauration $VIRTUAL_DIR $HOSTNAME -> $RSYNC_SERVER)";
				;;
		esac
	else
		case "$ACTION" in
			'backup')
				MESSAGE="Aucune erreur pour la sauvegarde du VirtualDir $VIRTUAL_DIR de $HOSTNAME vers $RSYNC_SERVER\n\n$(tail -2 "$LOG_DIR/$ACTION.log")";
				SUBJECT="RSync-Backup OK (Sauvegarde $VIRTUAL_DIR $HOSTNAME -> $RSYNC_SERVER)";
				;;
			'restore')
				MESSAGE="Aucune erreur pour la restauration du VirtualDir $VIRTUAL_DIR de $RSYNC_SERVER vers $HOSTNAME\n\n$(tail -2 "$LOG_DIR/$ACTION.log")";
				SUBJECT="RSync-Backup OK (Restauration $RSYNC_SERVER -> $HOSTNAME)";
				;;
		esac;
	fi
	echo -en "- Envoi du mail...";
	(echo -e $MESSAGE) | mail -s "$SUBJECT" $MAIL_ADDRESS -a "From: $MAIL_ADDRESS";
	errorCheck 2 "  Impossible d'envoyer le mail.";
}
 
case "$1" in
	'-b' | '--backup')
		ACTION="backup";
		backup;
		;;
	'-r' | '--restore')
		ACTION="restore";
		restore;
		;;
	*)
		echo -e "Usage: rsync-home [OPTIONS]\n\n  -b, --backup\t\tBackup files to the server.\n  -r, --restore\t\tRestore files from the server.\n";
		;;
esac;
 
exit 0;

Fichier de configuration

  • Language : Bash UNIX
  • Emplacement par défaut : $HOME/.config/rsync-home.conf
  • Droits par défaut : $USER:$USER 600
# RSync password
RSYNC_PASSWORD="RSYNCPASSWD"

# Date format, used to name the mailed logs files.
DATE="$(date '+%Y%m%d')";

# Log directory
LOG_DIR="$HOME/.log/rsync-home"

# Files and directory to exclude separated with a space. Don't forget the starting "/" (and the final one if it's a directory).
EXCLUDE_LIST=""

# Files and directory to include -even if they are in the exclude list- separated with a space. Don't forget the starting "/" (and the final one if it's a directory).
INCLUDE_LIST=""

# RSync options
RSYNC_OPTS="-aAhvz --delete"
RSYNC_SERVER="server"
RSYNC_USER="user"

# Virtual directory name
VIRTUAL_DIR="RsyncVirtualDir"

# Mail address to send results
MAIL_ADDRESS="user@server.tld"

Les commentaires sont fermés.

Fil RSS des commentaires de cet article