synchronisation_d_un_serveur_sur_deux_autres
Différences
Ci-dessous, les différences entre deux révisions de la page.
| Prochaine révision | Révision précédente | ||
| synchronisation_d_un_serveur_sur_deux_autres [2025/02/03 23:49] – créée inc002 | synchronisation_d_un_serveur_sur_deux_autres [2025/02/04 00:02] (Version actuelle) – inc002 | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | # Script de synchronisation PiHole | + | === Script de synchronisation PiHole |
| - | ## Vue d' | + | == Vue d' |
| Ce script permet de synchroniser une configuration PiHole depuis un serveur Mikrotik (source de vérité) vers deux serveurs Ubuntu. Il gère la copie des fichiers de configuration, | Ce script permet de synchroniser une configuration PiHole depuis un serveur Mikrotik (source de vérité) vers deux serveurs Ubuntu. Il gère la copie des fichiers de configuration, | ||
| - | ## Architecture | + | == Architecture |
| - | ### Serveurs | + | === Serveurs |
| - | - **Source de vérité** : Mikrotik (192.168.2.1) | + | * ''' |
| - | | + | |
| - | | + | |
| - | - **Serveurs cibles** : Ubuntu (192.168.2.8 et 192.168.2.9) | + | * ''' |
| - | | + | |
| - | | + | |
| - | ### Fichiers synchronisés | + | === Fichiers synchronisés |
| - | - **PiHole** : | + | * ''' |
| - | | + | ** gravity.db (base de données principale) |
| - | | + | ** custom.list (règles personnalisées) |
| - | | + | ** local.list (règles locales) |
| - | - **DNSMasq** : | + | * ''' |
| - | | + | ** 05-pihole-custom-cname.conf (règles CNAME) |
| - | ## Fonctionnalités | + | == Fonctionnalités |
| - | ### Système de backup | + | === Système de backup |
| - | - Localisation : `/ | + | * Localisation : < |
| - | - Rotation automatique : Conservation de 7 jours | + | * Rotation automatique : Conservation de 7 jours |
| - | - Structure : Un sous-dossier par serveur et par date | + | * Structure : Un sous-dossier par serveur et par date |
| - | - Contenu : Copie complète de /etc/pihole et / | + | * Contenu : Copie complète de /etc/pihole et / |
| - | ### Logging | + | === Logging |
| - | - Fichiers : `/ | + | * Fichiers : < |
| - | - Rotation : Quotidienne avec conservation de 7 jours | + | * Rotation : Quotidienne avec conservation de 7 jours |
| - | - Format : `[TIMESTAMP] Message` | + | * Format : < |
| - | - Niveaux : Info et Debug (avec --debug) | + | * Niveaux : Info et Debug (avec --debug) |
| - | ### Sécurité | + | === Sécurité |
| - | - Authentification SSH par clés | + | * Authentification SSH par clés |
| - | - Utilisateur dédié (piholesync) | + | * Utilisateur dédié (piholesync) |
| - | - Permissions sudo limitées | + | * Permissions sudo limitées |
| - | - Vérification des droits avant exécution | + | * Vérification des droits avant exécution |
| - | ## Processus de synchronisation | + | == Processus de synchronisation |
| - | ### 1. Vérifications préalables | + | === 1. Vérifications préalables |
| - | 1. Rotation des logs | + | # Rotation des logs |
| - | 2. Vérification de l' | + | # Vérification de l' |
| - | 3. Test des droits sudo sur tous les serveurs | + | # Test des droits sudo sur tous les serveurs |
| - | 4. Création des backups | + | # Création des backups |
| - | ### 2. Copie depuis Mikrotik | + | === 2. Copie depuis Mikrotik |
| - | 1. Création d'un dossier temporaire | + | # Création d'un dossier temporaire |
| - | 2. Copie des fichiers via SFTP | + | # Copie des fichiers via SFTP |
| - | 3. Vérification de l' | + | # Vérification de l' |
| - | 4. Synchronisation du fichier CNAME | + | # Synchronisation du fichier CNAME |
| - | ### 3. Déploiement | + | === 3. Déploiement |
| - | 1. Arrêt des services PiHole | + | # Arrêt des services PiHole |
| - | 2. Synchronisation des fichiers via rsync | + | # Synchronisation des fichiers via rsync |
| - | 3. Correction des permissions | + | # Correction des permissions |
| - | 4. Reconstruction des bases gravity | + | # Reconstruction des bases gravity |
| - | 5. Redémarrage des services | + | # Redémarrage des services |
| - | ## Utilisation | + | == Utilisation |
| - | ### Prérequis | + | === Prérequis |
| - | 1. Configuration SSH avec clés pour piholesync | + | # Configuration SSH avec clés pour piholesync |
| - | 2. Droits sudo pour piholesync sur les commandes : | + | # Droits sudo pour piholesync sur les commandes : |
| - | - rsync | + | #* rsync |
| - | - pihole | + | #* pihole |
| - | 3. Répertoires de logs et backups créés avec bonnes permissions | + | # Répertoires de logs et backups créés avec bonnes permissions |
| - | ### Commandes | + | === Commandes |
| - | ```bash | + | < |
| # Exécution normale | # Exécution normale | ||
| ./ | ./ | ||
| Ligne 84: | Ligne 84: | ||
| # Aide | # Aide | ||
| ./ | ./ | ||
| - | ``` | + | </ |
| - | ### Options | + | === Options |
| - | - `--dry-run` : Simulation sans modification | + | * ''' |
| - | - `--debug` : Affichage des messages de debug | + | * ''' |
| - | ## Résolution des problèmes | + | == Résolution des problèmes |
| - | ### Logs à vérifier | + | === Logs à vérifier |
| - | 1. `/ | + | # < |
| - | 2. Journaux système (`journalctl`) | + | # Journaux système (< |
| - | 3. Logs PiHole (`/ | + | # Logs PiHole (< |
| - | ### Problèmes courants | + | === Problèmes courants |
| - | 1. **Erreur SSH** : Vérifier les clés et permissions | + | ; Erreur SSH |
| - | 2. **Erreur sudo** : Contrôler le fichier sudoers | + | : Vérifier les clés et permissions |
| - | 3. **Fichiers invalides** : Vérifier l' | + | ; Erreur sudo |
| - | 4. **Services non redémarrés** : Relancer manuellement | + | : Contrôler le fichier sudoers |
| + | ; Fichiers invalides | ||
| + | : Vérifier l' | ||
| + | ; Services non redémarrés | ||
| + | : Relancer manuellement | ||
| - | ## Maintenance | + | == Maintenance |
| - | ### Tâches quotidiennes | + | === Tâches quotidiennes |
| - | - Vérification des logs | + | * Vérification des logs |
| - | - Contrôle des backups | + | * Contrôle des backups |
| - | - Validation du fonctionnement DNS | + | * Validation du fonctionnement DNS |
| - | ### Tâches hebdomadaires | + | === Tâches hebdomadaires |
| - | - Nettoyage des vieux backups | + | * Nettoyage des vieux backups |
| - | - Vérification de l' | + | * Vérification de l' |
| - | - Test de restauration | + | * Test de restauration |
| - | ### Tâches mensuelles | + | === Tâches mensuelles |
| - | - Rotation des clés SSH | + | * Rotation des clés SSH |
| - | - Audit des permissions | + | * Audit des permissions |
| - | - Test de recovery complet | + | * Test de recovery complet |
| + | |||
| + | <code " | ||
| + | # | ||
| + | # Variables de configuration | ||
| + | MIKROTIK_MASTER=" | ||
| + | LOCAL_HOST=" | ||
| + | OTHER_UBUNTU=" | ||
| + | DRY_RUN=0 | ||
| + | DEBUG=0 | ||
| + | |||
| + | # SSH Options | ||
| + | SSH_OPTS=" | ||
| + | SUDO_OPTS=" | ||
| + | |||
| + | # Chemins sur le Mikrotik (master) | ||
| + | MIKROTIK_PIHOLE_PATH="/ | ||
| + | MIKROTIK_DNSMASQ_PATH="/ | ||
| + | |||
| + | # Chemins de logs et backups | ||
| + | LOG_DIR="/ | ||
| + | LOG_FILE=" | ||
| + | BACKUP_DIR="/ | ||
| + | MAX_LOGS=7 | ||
| + | |||
| + | # Liste des fichiers à exclure | ||
| + | EXCLUDE_LIST=( | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | " | ||
| + | ) | ||
| + | |||
| + | # Fonction pour construire les options rsync | ||
| + | build_rsync_opts() { | ||
| + | local target=" | ||
| + | local opts=" | ||
| + | |||
| + | # Ajouter les exclusions | ||
| + | for item in " | ||
| + | opts+=" | ||
| + | done | ||
| + | |||
| + | # Ajouter --dry-run si nécessaire | ||
| + | [ $DRY_RUN -eq 1 ] && opts+=" | ||
| + | |||
| + | # Option spéciale pour Mikrotik | ||
| + | if [[ $target == *" | ||
| + | opts+=" | ||
| + | fi | ||
| + | |||
| + | echo " | ||
| + | } | ||
| + | |||
| + | # Fonction de debug | ||
| + | debug() { | ||
| + | if [ $DEBUG -eq 1 ]; then | ||
| + | echo " | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # Fonction de logging | ||
| + | log() { | ||
| + | local message=" | ||
| + | local timestamp=$(date ' | ||
| + | echo " | ||
| + | if [ -w " | ||
| + | echo " | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # Fonction de rotation des logs | ||
| + | rotate_logs() { | ||
| + | if [ -f " | ||
| + | mv " | ||
| + | find " | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # Fonction de vérification des droits sudo | ||
| + | check_sudo() { | ||
| + | local host=" | ||
| + | log " | ||
| + | |||
| + | if [[ $host == " | ||
| + | # Test local | ||
| + | log "Test des permissions rsync..." | ||
| + | if $SUDO_OPTS rsync --version >/ | ||
| + | log "✓ Droits sudo OK pour rsync" | ||
| + | else | ||
| + | log "✗ Droits sudo manquants pour rsync" | ||
| + | return 1 | ||
| + | fi | ||
| + | |||
| + | log "Test des permissions pihole..." | ||
| + | if $SUDO_OPTS pihole -v >/ | ||
| + | log "✓ Droits sudo OK pour pihole" | ||
| + | else | ||
| + | log "✗ Droits sudo manquants pour pihole" | ||
| + | return 1 | ||
| + | fi | ||
| + | else | ||
| + | # Test distant avec sudo -u piholesync | ||
| + | log "Test des permissions rsync sur $host..." | ||
| + | if sudo -u piholesync ssh $SSH_OPTS " | ||
| + | log "✓ Droits sudo OK pour rsync sur $host" | ||
| + | else | ||
| + | log "✗ Droits sudo manquants pour rsync sur $host" | ||
| + | return 1 | ||
| + | fi | ||
| + | |||
| + | log "Test des permissions pihole sur $host..." | ||
| + | if sudo -u piholesync ssh $SSH_OPTS " | ||
| + | log "✓ Droits sudo OK pour pihole sur $host" | ||
| + | else | ||
| + | log "✗ Droits sudo manquants pour pihole sur $host" | ||
| + | return 1 | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | log "✓ Tous les droits sudo sont corrects" | ||
| + | return 0 | ||
| + | } | ||
| + | |||
| + | # Fonction de backup modifiée | ||
| + | backup_pihole() { | ||
| + | local host=" | ||
| + | local backup_date=$(date ' | ||
| + | local backup_path=" | ||
| + | local rsync_opts=$(build_rsync_opts " | ||
| + | |||
| + | log " | ||
| + | |||
| + | # Création des répertoires avec les bonnes permissions | ||
| + | if ! sudo mkdir -p " | ||
| + | log " | ||
| + | return 1 | ||
| + | fi | ||
| + | |||
| + | # Attribution des permissions à piholesync | ||
| + | if ! sudo chown -R piholesync: | ||
| + | log " | ||
| + | return 1 | ||
| + | fi | ||
| + | |||
| + | if [[ $host == " | ||
| + | if ! sudo -u piholesync rsync $rsync_opts / | ||
| + | log " | ||
| + | return 1 | ||
| + | fi | ||
| + | if ! sudo -u piholesync rsync $rsync_opts / | ||
| + | log " | ||
| + | return 1 | ||
| + | fi | ||
| + | else | ||
| + | if ! sudo -u piholesync rsync $rsync_opts -e "ssh $SSH_OPTS" | ||
| + | log " | ||
| + | return 1 | ||
| + | fi | ||
| + | if ! sudo -u piholesync rsync $rsync_opts -e "ssh $SSH_OPTS" | ||
| + | log " | ||
| + | return 1 | ||
| + | fi | ||
| + | fi | ||
| + | |||
| + | log " | ||
| + | return 0 | ||
| + | } | ||
| + | # Fonction pour vérifier l' | ||
| + | # Fonction pour vérifier l' | ||
| + | check_remote_file() { | ||
| + | local host=" | ||
| + | local file=" | ||
| + | local description=" | ||
| + | |||
| + | log " | ||
| + | if [[ $host == *" | ||
| + | # Cas spécial pour Mikrotik | ||
| + | local mikrotik_path=${file#/ | ||
| + | local cmd="/ | ||
| + | |||
| + | debug " | ||
| + | debug " | ||
| + | debug " | ||
| + | |||
| + | local output=$(sudo -u piholesync ssh $SSH_OPTS " | ||
| + | debug " | ||
| + | debug " | ||
| + | |||
| + | if echo " | ||
| + | log "✓ $description trouvé" | ||
| + | return 0 | ||
| + | else | ||
| + | log "✗ $description non trouvé ($mikrotik_path)" | ||
| + | return 1 | ||
| + | fi | ||
| + | else | ||
| + | # Cas standard pour les serveurs Ubuntu | ||
| + | if sudo -u piholesync ssh $SSH_OPTS " | ||
| + | log "✓ $description trouvé" | ||
| + | return 0 | ||
| + | else | ||
| + | log "✗ $description non trouvé à $file" | ||
| + | return 1 | ||
| + | fi | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # Fonction pour copier depuis le Mikrotik | ||
| + | # Fonction pour copier depuis le Mikrotik | ||
| + | copy_from_mikrotik() { | ||
| + | local source=" | ||
| + | local dest=" | ||
| + | local description=" | ||
| + | |||
| + | log "Copie de $description depuis Mikrotik..." | ||
| + | if [ $DRY_RUN -eq 1 ]; then | ||
| + | log "[DRY RUN] Copie de $source vers $dest" | ||
| + | return 0 | ||
| + | fi | ||
| + | |||
| + | # Création d'un répertoire temporaire | ||
| + | local temp_dir=$(mktemp -d) | ||
| + | chown piholesync " | ||
| + | |||
| + | local temp_file=" | ||
| + | |||
| + | debug " | ||
| + | |||
| + | # Exécution de la commande SFTP | ||
| + | if ! sudo -u piholesync sftp " | ||
| + | log "✗ Erreur lors de la copie de $description via SFTP" | ||
| + | rm -rf " | ||
| + | return 1 | ||
| + | fi | ||
| + | |||
| + | # Vérification de la taille du fichier | ||
| + | local file_size=$(stat -c%s " | ||
| + | debug " | ||
| + | |||
| + | # Vérification SQLite pour gravity.db | ||
| + | if [[ " | ||
| + | if ! sqlite3 " | ||
| + | log "✗ Le fichier temporaire $description n'est pas une base SQLite valide" | ||
| + | rm -rf " | ||
| + | return 1 | ||
| + | fi | ||
| + | debug " | ||
| + | fi | ||
| + | |||
| + | # Déplacement du fichier vers sa destination finale | ||
| + | if ! mv " | ||
| + | log "✗ Erreur lors du déplacement de $description vers sa destination finale" | ||
| + | rm -rf " | ||
| + | return 1 | ||
| + | fi | ||
| + | |||
| + | # Nettoyage | ||
| + | rm -rf " | ||
| + | |||
| + | # Vérification finale | ||
| + | if [ ! -s " | ||
| + | log "✗ Le fichier $description est vide après copie" | ||
| + | return 1 | ||
| + | fi | ||
| + | |||
| + | log "✓ Copie de $description réussie (taille: $file_size octets)" | ||
| + | return 0 | ||
| + | } | ||
| + | |||
| + | |||
| + | |||
| + | # Fonction pour vérifier la taille d'un fichier sur le Mikrotik | ||
| + | check_mikrotik_file_size() { | ||
| + | local file=" | ||
| + | local min_size=" | ||
| + | |||
| + | log " | ||
| + | |||
| + | # Obtenir les informations du fichier via ssh | ||
| + | local file_info=$(sudo -u piholesync ssh $SSH_OPTS " | ||
| + | |||
| + | # Extraire la taille (premier champ de la sortie du) | ||
| + | local size=$(echo " | ||
| + | |||
| + | if [ -z " | ||
| + | log "✗ Le fichier $file sur le Mikrotik est trop petit ou inexistant (${size:-0} octets < ${min_size} octets attendus)" | ||
| + | return 1 | ||
| + | fi | ||
| + | |||
| + | log "✓ Taille du fichier $file sur le Mikrotik: ${size} octets" | ||
| + | return 0 | ||
| + | } | ||
| + | |||
| + | # Fonction pour arrêter/ | ||
| + | manage_pihole_service() { | ||
| + | local host=" | ||
| + | local action=" | ||
| + | local description=" | ||
| + | |||
| + | log " | ||
| + | if [[ $host == " | ||
| + | case $action in | ||
| + | " | ||
| + | sudo pihole -f stop | ||
| + | ;; | ||
| + | " | ||
| + | sudo pihole -f start | ||
| + | ;; | ||
| + | " | ||
| + | sudo pihole -g | ||
| + | ;; | ||
| + | esac | ||
| + | else | ||
| + | case $action in | ||
| + | " | ||
| + | sudo -u piholesync ssh -t " | ||
| + | ;; | ||
| + | " | ||
| + | sudo -u piholesync ssh -t " | ||
| + | ;; | ||
| + | " | ||
| + | sudo -u piholesync ssh -t " | ||
| + | ;; | ||
| + | esac | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | sync_to_ubuntu() { | ||
| + | local src=" | ||
| + | local dest=" | ||
| + | local host=" | ||
| + | local description=" | ||
| + | |||
| + | log " | ||
| + | if [ $DRY_RUN -eq 1 ]; then | ||
| + | log "[DRY RUN] Synchronisation vers $host" | ||
| + | return 0 | ||
| + | fi | ||
| + | |||
| + | if [[ $host == " | ||
| + | # Vérification et création du répertoire | ||
| + | if [ ! -d " | ||
| + | sudo mkdir -p " | ||
| + | fi | ||
| + | |||
| + | # Exécution de rsync en sudo pour éviter les problèmes de permissions | ||
| + | sudo rsync -avz --no-perms --no-owner --no-times " | ||
| + | |||
| + | # Correction des permissions pour gravity.db | ||
| + | if [[ -f " | ||
| + | sudo chown pihole: | ||
| + | sudo chmod 664 " | ||
| + | fi | ||
| + | else | ||
| + | # Synchronisation distante avec rsync | ||
| + | sudo -u piholesync rsync -avz --no-perms --no-owner --no-times " | ||
| + | |||
| + | # Correction des permissions sur le serveur distant | ||
| + | if [[ " | ||
| + | if [[ -n " | ||
| + | sudo -u piholesync ssh $SSH_OPTS " | ||
| + | sudo -u piholesync ssh $SSH_OPTS " | ||
| + | else | ||
| + | log " | ||
| + | fi | ||
| + | fi | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | |||
| + | sync_dnsmasq_cname() { | ||
| + | local cname_file=" | ||
| + | local src_path=" | ||
| + | |||
| + | log " | ||
| + | |||
| + | # Vérifie si le fichier existe sur le Mikrotik en utilisant /file get | ||
| + | local check_output | ||
| + | check_output=$(sudo -u piholesync ssh $SSH_OPTS " | ||
| + | debug " | ||
| + | |||
| + | if [ -n " | ||
| + | log "✓ Fichier CNAME trouvé sur le Mikrotik, synchronisation..." | ||
| + | |||
| + | if [ $DRY_RUN -eq 0 ]; then | ||
| + | # Crée le répertoire temporaire s'il n' | ||
| + | mkdir -p " | ||
| + | |||
| + | # Écrit le contenu directement dans le fichier temporaire | ||
| + | echo " | ||
| + | |||
| + | # Synchronise vers les deux serveurs Ubuntu | ||
| + | sync_to_ubuntu " | ||
| + | sync_to_ubuntu " | ||
| + | else | ||
| + | log "[DRY RUN] Le fichier CNAME serait synchronisé" | ||
| + | fi | ||
| + | else | ||
| + | log "! Fichier CNAME non trouvé sur le Mikrotik, suppression sur les serveurs Ubuntu..." | ||
| + | |||
| + | if [ $DRY_RUN -eq 0 ]; then | ||
| + | # Supprime le fichier sur les deux serveurs Ubuntu s'il existe | ||
| + | sudo rm -f "/ | ||
| + | sudo -u piholesync ssh $SSH_OPTS " | ||
| + | else | ||
| + | log "[DRY RUN] Le fichier CNAME serait supprimé des serveurs Ubuntu" | ||
| + | fi | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # Fonction de rotation des logs | ||
| + | rotate_logs() { | ||
| + | if [ -f " | ||
| + | mv " | ||
| + | find " | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # Fonction pour effectuer les backups | ||
| + | perform_backups() { | ||
| + | if [ $DRY_RUN -eq 0 ]; then | ||
| + | log " | ||
| + | | ||
| + | | ||
| + | | ||
| + | log "[DRY RUN] Les sauvegardes seraient effectuées ici" | ||
| + | fi | ||
| + | } | ||
| + | |||
| + | # Traitement des arguments | ||
| + | while [[ $# -gt 0 ]]; do | ||
| + | case $1 in | ||
| + | | ||
| + | | ||
| + | | ||
| + | ;; | ||
| + | | ||
| + | | ||
| + | | ||
| + | ;; | ||
| + | | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | echo " | ||
| + | exit 0 | ||
| + | ;; | ||
| + | *) | ||
| + | echo " | ||
| + | echo " | ||
| + | exit 1 | ||
| + | ;; | ||
| + | | ||
| + | done | ||
| + | |||
| + | log "Mode: $([ $DRY_RUN -eq 1 ] && echo 'DRY RUN' || echo ' | ||
| + | |||
| + | # Rotation des logs au démarrage | ||
| + | rotate_logs | ||
| + | |||
| + | # Vérification des prérequis | ||
| + | log " | ||
| + | check_remote_file " | ||
| + | check_remote_file " | ||
| + | check_remote_file " | ||
| + | |||
| + | # Vérification des droits sudo | ||
| + | log " | ||
| + | check_sudo " | ||
| + | check_sudo " | ||
| + | |||
| + | # Effectuer les backups avant synchronisation | ||
| + | perform_backups | ||
| + | |||
| + | # Création du dossier temporaire | ||
| + | TEMP_DIR="/ | ||
| + | mkdir -p " | ||
| + | mkdir -p " | ||
| + | |||
| + | # Synchronisation depuis le Mikrotik | ||
| + | log " | ||
| + | |||
| + | # Copie des fichiers depuis le Mikrotik | ||
| + | mkdir -p " | ||
| + | |||
| + | copy_from_mikrotik " | ||
| + | copy_from_mikrotik " | ||
| + | copy_from_mikrotik " | ||
| + | |||
| + | # Pour le dossier dnsmasq.d | ||
| + | log " | ||
| + | if [ $DRY_RUN -eq 1 ]; then | ||
| + | log "[DRY RUN] Vérification et synchronisation du fichier CNAME" | ||
| + | else | ||
| + | sync_dnsmasq_cname || exit 1 | ||
| + | fi | ||
| + | |||
| + | # Dans la partie synchronisation : | ||
| + | if [ $DRY_RUN -eq 0 ]; then | ||
| + | # Arrêt des services sur les deux serveurs | ||
| + | manage_pihole_service " | ||
| + | manage_pihole_service " | ||
| + | |||
| + | log " | ||
| + | |||
| + | # Synchronisation locale | ||
| + | sync_to_ubuntu " | ||
| + | sync_to_ubuntu " | ||
| + | |||
| + | # Synchronisation vers le serveur distant | ||
| + | sync_to_ubuntu " | ||
| + | sync_to_ubuntu " | ||
| + | |||
| + | # Reconstruction de la base gravity sur les deux serveurs | ||
| + | manage_pihole_service " | ||
| + | manage_pihole_service " | ||
| + | |||
| + | # Démarrage des services | ||
| + | manage_pihole_service " | ||
| + | manage_pihole_service " | ||
| + | fi | ||
| + | |||
| + | |||
| + | # Nettoyage | ||
| + | rm -rf " | ||
| + | log " | ||
| + | </ | ||
| + | [[Category: | ||
| + | [[Category: | ||
| + | [[Category: | ||
synchronisation_d_un_serveur_sur_deux_autres.1738626575.txt.gz · Dernière modification : de inc002
