Update README.md

This commit is contained in:
Ssyleric
2025-12-10 13:05:11 +01:00
committed by GitHub
parent ecf32518af
commit 09dfeb700f

264
README.md
View File

@@ -1 +1,263 @@
# nettoyage-des-downloads # 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 :
```bash
/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 :
```bash
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) :
```bash
mkdir -p /home/scripts
```
---
## 🧾 Contenu fonctionnel du script
### 1. Variables principales
- **Discord Webhook** (déjà configuré dans le script) :
```bash
WEBHOOK_URL="https://discord.com/api/webhooks/…"
```
- **Dossiers à nettoyer** :
```bash
DIRS=(
"/downloads/incoming/medias"
"/downloads/incoming/music"
)
```
- **Rétention (168h)** :
```bash
MIN_AGE_HOURS=168
```
- **Fichier de log** :
```bash
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*` :
```bash
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 :
```bash
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é** :
```bash
: > "$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 :
```text
📂 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 :
```bash
! -name '.nfs*'
```
Ils seront nettoyés automatiquement par NFS une fois quaucun process ne les utilise.
---
## 🚀 Installation / Mise à jour
1. Sur `docker-ptr` :
```bash
mkdir -p /home/scripts
nano /home/scripts/cleanup_downloads.sh
```
2. Coller le script complet fourni.
3. Rendre le script exécutable :
```bash
chmod +x /home/scripts/cleanup_downloads.sh
```
4. Test manuel :
```bash
/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` :
```bash
crontab -e
```
Ajouter la ligne suivante :
```cron
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 :
```bash
MIN_AGE_HOURS=168
```
Exemple pour 3 jours :
```bash
MIN_AGE_HOURS=72
```
- **Ajouter / retirer des dossiers** :Modifier la liste :
```bash
DIRS=(
"/downloads/incoming/medias"
"/downloads/incoming/music"
# Ajouter ici un autre dossier éventuel
)
```
- **Changer le webhook Discord** :
Modifier la valeur de :
```bash
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.