Update README.md
This commit is contained in:
264
README.md
264
README.md
@@ -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 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 :
|
||||
```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 d’erreur é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 qu’aucun 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 à l’exclusion des `.nfs*`.
|
||||
|
||||
Il est prêt à être utilisé en production dans le LXC `docker-ptr` avec une exécution hebdomadaire via cron.
|
||||
|
||||
Reference in New Issue
Block a user