Bonjour et merci pour ce script, c'est exaxtement ce que je cherchais.
J'administre un site sur le deep web qui propose entre autre de fournir un hebergement. Malheureusement je n'ai pas réussit à faire fonctionner les quotas sur mes serveurs. J'avais donc décidé de coder un petit script pour remplacer cette fonction super importante(il ne s'agit pas que les clients s'attribuent tout l'espace disque des serveurs)
J'ai legerement modifié le script, notament j'utilise sendemail pour ne pas être mis en spam et pouvoir utiliser le serveur SMTP de tormail (un fournisseur de mail anonyme sur Tor) . Il est possible de torifier sendemail grace à la commande usewithtor.
Il suffit juste de modifier les variables pour pouvoir s'en servir
Si vous utiliser le serveur SMTP de gmail
-o tls=yes à sendemail
L'adresse du serveur SMTP de gmail est
smtp.gmail.com
# !/bin/bash
# SCRIPT gestion_repertoire.sh
# Surveille la taille des répertoires et envoie un courriel si celle-ci dépasse le quota défini et rempli un log.
# http://forum.ubuntu-fr.org/viewtopic.php?id=792761
# =============================================================================================================================
# Pré-requis :
# Installer sendemail et les modules perl ssl si necessaire
# sudo apt-get install libio-socket-ssl-perl libnet-ssleay-perl perl
# sudo apt-get install sendemail
# Un bon tuto sur sendemail à
# http://www.debianadmin.com/how-to-sendemail-from-the-command-line-using-a-gmail-account-and-others.html
#
# chmod a+x gestion_repertoire.sh (pour rendre le script exécutable.)
# Pour automatiser le lancement du script j'utilise crontab.
# Editer le fichier /etc/crontab et rajouter la ligne ci-dessous :
# 0 5 * * * root bash /home/administrateur/Bureau/gestion_repertoire.sh
# Root lance le script une fois par jour à 5h (pour tous les jours de la semaine) en utilisant l'interpréteur de commande bash.
# =============================================================================================================================
#
# Nom de l'admin (doit correspondre à l'id du compte SMTP)
admin="admin"
mdp="admin"
# Adresse mail de l'admin (doit correspondre au compte SMTP servant à envoyer le mail)
mailAdmin="admin@dom.com"
#adresse du serveur SMTP
serveurSMTP="smtp.com"
# Chemin du Log
Log="/home/admin/quotaLog.txt"
#Verifie que le fichier de log existe et sinon le crée
if test -f $Log; then
echo "Le fichier existe"
else
touch $Log;
fi
# Chemin du ou des répertoires a surveiller.
DossierASurveiller1="/home/test"
# Nom du ou des utilisateurs.
user1="test"
# Adresse mail du ou des utilisateurs.
mailUser1="test@dom.com"
# Constante pour les statistiques.
pourcentage=100
# Récupére la taille en Mo plus le chemin du répertoire.
info1=$(du -sm $DossierASurveiller1)
# Découpe le résultat précédent pour garder uniquement la taille du répertoire en Mo.
taille1=$(echo $info1 | cut -d' ' -f1)
# Taille maximale du répertoire autorisé = 1 Go. => 40 Mo pour les tests
max=40
# Taille de début d'alerte = 800 Mo. => 20 Mo pour les tests
trop=20
# Calcul du pourcentage d'utilisation.
stat1=$(echo "scale=2;($taille1/$max*$pourcentage)" | bc)
# Création du fichier du contenu des mails.
touch $DossierASurveiller1/readme.txt
# Datage de la remontée d'informations.
DATE=`date +%d/%m/%Y-%H:%M:%S`
# Surveillance de /home/test/
# Envoie une alerte lorsque la taille du répertoire est comprise entre trop et max
if ((taille1 > trop && taille1 < max));
then
echo $DATE" Répertoire : "$DossierASurveiller1" = "$taille1" Limite fixée à "$max" Utilisation = "$stat1" % Pour "$user1 >> $Log
echo "ATTENTION : La taille du repertoire "$DossierASurveiller1" est de "$taille1" Mo alors que la limite est de "$max" Mo. Soit "$stat1" % des ressources de "$user1" sont utilisees le "$DATE > $DossierASurveiller1/readme.txt
#Envoi du mail
sendemail -f $mailAdmin -t $mailUser1 -cc $mailAdmin -u "AVERTISSEMENT : Espace du repertoire de sauvegarde CRITIQUE." -s $serveurSMTP -xu $admin -xp $mdp -o message-file=$DossierASurveiller1/readme.txt
sleep .5
fi
# Envoie une alerte lorsque le répertoire est plein.
if ((taille1 == max));
then
echo $DATE" Répertoire : "$DossierASurveiller1" = "$taille1" Limite fixée à "$max" Utilisation = "$stat1" % Pour "$user1 >> $Log
echo "ATTENTION : La taille du repertoire "$DossierASurveiller1" est de "$taille1" Mo alors que la limite est de "$max" Mo. Soit "$stat1" % des ressources de "$user1" sont utilisees le "$DATE > $DossierASurveiller1/readme.txt
#Envoi du mail
sendemail -f $mailAdmin -t $mailUser1 -cc $mailAdmin -u "DANGER : Espace du repertoire de sauvegarde PLEIN." -s $serveurSMTP -xu $admin -xp $mdp -o message-file=$DossierASurveiller1/readme.txt
sleep .5
fi
# Envoie une alerte lorsque le répertoire dépasse le max.
# On peut aussi bloquer le compte si on est mechant
#Il suffit d'attribuer les droit du repertoire à l'admin et en interdire l'acces aux autres
# chown -R $admin:$admin $DossierASurveiller && chmod -R 700 $admin:$admin $DossierASurveiller
if ((taille1 > max));
then
echo $DATE" Répertoire : "$DossierASurveiller1" = "$taille1" Limite fixée à "$max" Utilisation = "$stat1" % Pour "$user1 >> $Log
echo "ATTENTION : La taille du repertoire "$DossierASurveiller1" est de "$taille1" Mo alors que la limite est de "$max" Mo. Soit "$stat1" % des ressources de "$user1" sont utilisees le "$DATE > $DossierASurveiller1/readme.txt
#Envoi du mail
sendemail -f $mailAdmin -t $mailUser1 -cc $mailAdmin -u "URGENT : Espace du repertoire de sauvegarde DEPASSE." -s $serveurSMTP -xu $admin -xp $mdp -o message-file=$DossierASurveiller1/readme.txt
sleep .5
fi
# Suppression du fichier du contenu des mails.
rm $DossierASurveiller1/readme.txt
#######################################
# INFOS : #
# Script : gestion_repertoire.sh #
# Version 1.0 #
# Copyleft #
# 21/01/2012 à 13h00 #
#######################################
#16 Le 23/01/2012, à 11:34
#
# jeudi 9 août 2012, 23:13:22 (UTC+0000)
# Changelog by v1ct0r
# Utilisation de sendemail pour l'envoi de mail à l'aide d'un serveur smtp
# Utilisation de l'option -cc pour envoyer une copie carbone du mail à l'admin
# Verifie que le fichier de Log existe sinon le crée
# Ajout des variables admin, mdp, mailAdmin et serveurSMTP pour une configuration plus simple du script
# Ajout de la possibilité de bloquer automatiquement l'acces du compte qui depasse le max (decommenter la ligne correspondante)
#