6.1 KiB
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 d’un log propre (un seul run à la fois) :
/var/log/cleanup_downloads.log - Envoi d’un 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 :
- Binaire
jq(installé automatiquement si absent) curl(normalement déjà présent)- Accès réseau sortant vers Discord (port HTTPS 443)
- Dossier
/home/scriptspré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 :
- Mesure la taille avant avec
du -sh. - Cherche les fichiers plus vieux que la rétention, en excluant les
.nfs*:find "$DIR" -type f -mmin +"$min_age_minutes" ! -name '.nfs*' -print - Supprime chaque fichier trouvé et compte le nombre de suppressions.
- Supprime les répertoires vides restants :
find "$DIR" -mindepth 1 -type d -empty -print -delete - 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 d’erreur é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 qu’aucun process ne les utilise.
🚀 Installation / Mise à jour
-
Sur
docker-ptr:mkdir -p /home/scripts nano /home/scripts/cleanup_downloads.sh -
Coller le script complet fourni.
-
Rendre le script exécutable :
chmod +x /home/scripts/cleanup_downloads.sh -
Test manuel :
/home/scripts/cleanup_downloads.sh tail -n 80 /var/log/cleanup_downloads.log -
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=168Exemple 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 à l’exclusion des
.nfs*.
Il est prêt à être utilisé en production dans le LXC docker-ptr avec une exécution hebdomadaire via cron.