Files
nettoyage-des-downloads/README.md
2025-12-10 13:05:11 +01:00

6.1 KiB
Raw Permalink Blame History

Nettoyage des downloads (cleanup_downloads.sh)

🎯 Objectif

Automatiser le nettoyage hebdomadaire des dossiers de downloads temporaires sur le conteneur LXC docker-ptr, avec:

  • Suppression des fichiers de plus de 168 heures (7 jours) dans :
    • /downloads/incoming/medias
    • /downloads/incoming/music
  • Suppression des dossiers vides résiduels.
  • Génération dun log propre (un seul run à la fois) : /var/log/cleanup_downloads.log
  • Envoi dun rapport détaillé sur Discord :
    • Résumé par dossier (avant / après / nombre de fichiers supprimés)
    • Log complet joint en pièce jointe.

Ce script est prévu pour tourner 1 fois par semaine via cron sur docker-ptr.


📂 Emplacement et nom du script

  • Hôte : conteneur LXC docker-ptr
  • Script :
    /home/scripts/cleanup_downloads.sh
    

⚙️ Dossiers concernés

Le script traite exactement ces deux répertoires :

  • /downloads/incoming/medias
  • /downloads/incoming/music

Les deux répertoires doivent être accessibles dans le LXC (typiquement montés depuis OMV via NFS).


⏱️ Rétention

  • Rétention actuelle : 168 heures (7 jours)
  • Paramètre dans le script :
    MIN_AGE_HOURS=168
    

Tous les fichiers plus vieux que cette durée sont candidats à la suppression (hors fichiers .nfs*).


🧩 Pré-requis

Sur le conteneur docker-ptr :

  1. Binaire jq (installé automatiquement si absent)
  2. curl (normalement déjà présent)
  3. Accès réseau sortant vers Discord (port HTTPS 443)
  4. Dossier /home/scripts présent (sinon créé manuellement) :
    mkdir -p /home/scripts
    

🧾 Contenu fonctionnel du script

1. Variables principales

  • Discord Webhook (déjà configuré dans le script) :

    WEBHOOK_URL="https://discord.com/api/webhooks/…"
    
  • Dossiers à nettoyer :

    DIRS=(
      "/downloads/incoming/medias"
      "/downloads/incoming/music"
    )
    
  • Rétention (168h) :

    MIN_AGE_HOURS=168
    
  • Fichier de log :

    LOG_FILE="/var/log/cleanup_downloads.log"
    

2. Comportement détaillé

Pour chaque dossier de DIRS :

  1. Mesure la taille avant avec du -sh.
  2. Cherche les fichiers plus vieux que la rétention, en excluant les .nfs* :
    find "$DIR" -type f -mmin +"$min_age_minutes" ! -name '.nfs*' -print
    
  3. Supprime chaque fichier trouvé et compte le nombre de suppressions.
  4. Supprime les répertoires vides restants :
    find "$DIR" -mindepth 1 -type d -empty -print -delete
    
  5. Mesure la taille après (du -sh).

Les informations sont enregistrées dans le log et résumées dans le message Discord.


📝 Gestion du log

  • Fichier : /var/log/cleanup_downloads.log
  • À chaque exécution, le log est réinitialisé :
    : > "$LOG_FILE"
    
  • Le fichier joint envoyé à Discord contient uniquement le dernier run, avec :
    • Date/heure
    • Dossiers traités
    • Taille avant / après
    • Liste des fichiers supprimés
    • Dossiers vides supprimés
    • Messages derreur éventuels (ex. permissions).

💬 Notification Discord

Le script construit un message multi-ligne du type :

📂 Cleanup downloads (docker-ptr)

Date : 2025-12-10 12:56:32
Rétention : 168h (7 jours)

Résumé par répertoire :
/downloads/incoming/medias :
  • avant     : 262G
  • après     : 262G
  • supprimés : 0
/downloads/incoming/music :
  • avant     : 155G
  • après     : 155G
  • supprimés : 10

Log complet en pièce jointe.

Le contenu est envoyé avec jq -Rs pour respecter le format JSON de Discord et la limite de 2000 caractères sur le champ content. Le log est joint comme fichier texte via curl -F "file=@…".


🔐 Particularités NFS (.nfs*)

Les fichiers de type .nfsXXXXXXXX sont propres à NFS et apparaissent lorsque :

  • un fichier est supprimé côté serveur,
  • mais encore ouvert par un process côté client (lecteur, client torrent, etc.).

Pour éviter les erreurs répétées et inutiles, le script ignore ces fichiers :

! -name '.nfs*'

Ils seront nettoyés automatiquement par NFS une fois quaucun process ne les utilise.


🚀 Installation / Mise à jour

  1. Sur docker-ptr :

    mkdir -p /home/scripts
    nano /home/scripts/cleanup_downloads.sh
    
  2. Coller le script complet fourni.

  3. Rendre le script exécutable :

    chmod +x /home/scripts/cleanup_downloads.sh
    
  4. Test manuel :

    /home/scripts/cleanup_downloads.sh
    tail -n 80 /var/log/cleanup_downloads.log
    
  5. Vérifier que :

    • un message apparaît bien sur Discord,
    • le log (cleanup_downloads.log) décrit uniquement le dernier run,
    • les tailles avant/après et le nombre de fichiers supprimés sont cohérents.

⏲️ Cron : exécution automatique hebdomadaire

Pour lancer le script une fois par semaine (dimanche à 04h00) sur docker-ptr :

crontab -e

Ajouter la ligne suivante :

0 4 * * 0 /home/scripts/cleanup_downloads.sh

⚠️ Le chemin doit rester absolu (/home/scripts/...) pour être compatible avec cron.


🔧 Personnalisation future

  • Modifier la rétention :Changer :

    MIN_AGE_HOURS=168
    

    Exemple pour 3 jours :

    MIN_AGE_HOURS=72
    
  • Ajouter / retirer des dossiers :Modifier la liste :

    DIRS=(
      "/downloads/incoming/medias"
      "/downloads/incoming/music"
      # Ajouter ici un autre dossier éventuel
    )
    
  • Changer le webhook Discord : Modifier la valeur de :

    WEBHOOK_URL="..."
    

Résumé

Ce script cleanup_downloads.sh assure :

  • un nettoyage automatique, sécurisé et tracé des dossiers de downloads temporaires,
  • un log clair, limité au dernier run,
  • une visibilité complète via Discord (résumé + log joint),
  • la compatibilité avec NFS grâce à lexclusion des .nfs*.

Il est prêt à être utilisé en production dans le LXC docker-ptr avec une exécution hebdomadaire via cron.