#!/bin/bash

# --------------------------------------------------------------------------
# GLPI Backup Script adapté pour GLPI 10.0.1.17 et ta configuration
# --------------------------------------------------------------------------

# === Fichier de configuration ===
BACKUP_CONFIG="/opt/scripts/glpi-backup/glpi-backup.conf"

# === Fonction pour lire les variables du fichier de config ===
read_config() {
    local key="$1"
    grep "^${key}=" "$BACKUP_CONFIG" | cut -d'=' -f2- | tr -d '"'
}

# === Lecture des variables de configuration ===
GLPI_DIR=$(read_config "GLPI_DIR")
GLPI_DATA_DIR=$(read_config "GLPI_DATA_DIR")
DB_HOST=$(read_config "DB_HOST")
DB_NAME=$(read_config "DB_NAME")
DB_USER=$(read_config "DB_USER")
DB_PASS=$(read_config "DB_PASS")
BACKUP_RETENTION_DAYS=$(read_config "BACKUP_RETENTION_DAYS")
RSYNC_ENABLE=$(read_config "RSYNC_ENABLE")
RSYNC_USER=$(read_config "RSYNC_USER")
RSYNC_HOST=$(read_config "RSYNC_HOST")
RSYNC_KEY=$(read_config "RSYNC_KEY")
RSYNC_PATH=$(read_config "RSYNC_PATH")

# === Répertoire temporaire local pour backup ===
BACKUP_DIR="/tmp/glpi_backup"

# === Création du répertoire backup si besoin ===
mkdir -p "$BACKUP_DIR"

# === Date/heure pour nommer les fichiers
DATE=$(date +"%Y%m%d%H%M%S")

# === Fichiers de backup
GLPI_BACKUP_FILE="${BACKUP_DIR}/glpi_files_backup_${DATE}.tar.gz"
DB_BACKUP_FILE="${BACKUP_DIR}/glpi_db_backup_${DATE}.sql.gz"

# === Backup des fichiers GLPI ===
echo "[+] Sauvegarde du répertoire ${GLPI_DATA_DIR}..."
tar --exclude='_sessions' -czf "$GLPI_BACKUP_FILE" -C "$GLPI_DATA_DIR" .

# === Backup de la base de données ===
echo "[+] Sauvegarde de la base de données ${DB_NAME}..."
mysqldump -h "$DB_HOST" -u "$DB_USER" -p"$DB_PASS" "$DB_NAME" | gzip > "$DB_BACKUP_FILE"

# === Nettoyage des anciens backups locaux ===
echo "[+] Nettoyage des backups locaux de plus de ${BACKUP_RETENTION_DAYS} jours..."
find "$BACKUP_DIR" -type f -mtime +"$BACKUP_RETENTION_DAYS" -delete

# === Rsync vers NAS si activé ===
if [ "$RSYNC_ENABLE" = "yes" ]; then
    echo "[+] Envoi des backups vers NAS ($RSYNC_HOST)..."
    rsync -avz --no-times --no-perms --no-owner --no-group -e "ssh -i $RSYNC_KEY" "$BACKUP_DIR/" "$RSYNC_USER@$RSYNC_HOST:$RSYNC_PATH"
fi

echo "[✔] Sauvegarde GLPI terminée avec succès."
sudo apt update
sudo apt install -y git
sudo mkdir -p /opt/scripts/glpi-backup
sudo chown root:root /opt/scripts/glpi-backup
cd /opt/scripts
sudo git clone https://github.com/allanlopesprado/glpi-backup.git glpi-backup

sudo nano /opt/scripts/glpi-backup/glpi-backup.conf
  

GLPI_DIR="/var/www/html/glpi"
GLPI_DATA_DIR="/var/www/html/glpi/files"

DB_HOST="localhost"
DB_NAME="glpi"
DB_USER="glpi"
DB_PASS="glpi"

BACKUP_RETENTION_DAYS=5

RSYNC_ENABLE="yes"
RSYNC_USER="bck_user"
RSYNC_HOST="10.10.20.11"
RSYNC_KEY="/home/glpi/.ssh/backup_omv_key"
RSYNC_PATH="/srv/dev-disk-by-uuid-7e0f5dd9-bcc0-46b8-b3ea-f90ad5ccea67/GLPI_BACKUP" 
sudo chown -R root:root /opt/scripts/glpi-backup
sudo chmod -R 700 /opt/scripts/glpi-backup
sudo chown glpi:glpi /home/glpi/.ssh/backup_omv_key*
sudo chmod 600 /home/glpi/.ssh/backup_omv_key*

sudo -u glpi crontab -e
0 2 * * * /opt/scripts/glpi-backup/glpi-backup.sh >> /var/log/glpi-backup.log 2>&1

Tableau récapitulatif Crontab


PositionSignificationValeurs possiblesExempleSignification pratique
1ère ★Minute0 à 595 → à la 5e minute
2ème ★Heure0 à 2314 → 14h (2PM)
3ème ★Jour du mois1 à 3115 → le 15 du mois
4ème ★Mois1 à 127 → juillet
5ème ★Jour de la semaine0 à 7 (0 et 7 = dimanche)1 → lundi




 Exemples pratiques utiles


CrontabLecture humaine
* * * * *Toutes les minutes
*/5 * * * *Toutes les 5 minutes
0 * * * *À chaque heure pile
30 2 * * *Tous les jours à 2h30 du matin
0 0 * * 0Tous les dimanches à minuit
0 8-18 * * 1-5Toutes les heures de 8h à 18h du lundi au vendredi
15 14 1 * *Le 1er de chaque mois à 14h15
0 0 1 1 *Le 1er janvier à minuit (Nouvel an 🎉)





  • No labels