IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Unix Discussion :

[..] Script bash de surveillance des espaces disques


Sujet :

Unix

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 10
    Par défaut [..] Script bash de surveillance des espaces disques
    Je suis tout nouveau sous le forum et idem pour le scripting sous linux.

    Voila je cherche à réaliser un script qui va surveiller l'espace utiliser par certain répertoire (chaque répertoire représente un espace ftp alloué au client) ainsi que l'espace total du disque afin de prévenir l'opérateur par mail si le client stocke de trop gros fichiers. (j'ai pensé à 5Go d'espace par client).
    Il pourra aussi supprimer les anciens fichiers > 1 mois.

    Voici mon code :

    Code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    #!/bin/bash
     
    # Suppression du fichier de log
    rm -f /var/www/vhosts/toto.fr/web_users/EspaceFtp.log
     
    # Changement du répertoire courant
    cd /var/www/vhosts/toto.fr/web_users
     
    # Boucle pour traiter tous les répertoires clients (dans web_users) mais non récursivement (1 seul niveau)  : pour réaliser une liste.
    ListeWebUsers="$(find * -maxdepth 0 -type d)"
    for WebUsers in ${ListeWebUsers};do
     
        # Calcul de l'espace occupé par le client
        ResultTailleRepWebUsers=$(du -sm $WebUsers)
        TailleRepWebUsers=$(echo $ResultTailleRepWebUsers|cut -d " " -f1)
     
        # Gros clients : Test si la taille est > 5 Go
        if [ $TailleRepWebUsers>5000 ];then
            # Envoi d'un mail pour nous prévenir (EnvoiMail() $Subject $Body)
            Subject="[" $WebUsers "] L'espace utilisé sur leur serveur ftp est trop importante : "$TailleRepWebUsers "Mo"
            Body="Veuillez demander au client de supprimer les anciens fichiers rapidement."
            Pj=""
            EnvoiMail() "$Subject" "$Body" "$Pj"
        fi
     
        # Suppression des fichiers vieux de plus d'un mois
        find /$WebUsers -mtime +30 -print -exec rm -fR {} + >> EspaceFtp.log
     
        # Suppression des répertoires vides
        find /$WebUsers/* -type d -empty|xargs rm -fR        
     
        # Remplissage du fichier de suivi EspaceFtp.log
        echo "$WebUsers            $TailleRepWebUsers">>EspaceFtp.log
     
    done
     
    # Récuperation en pourcentage de l'espace restant disponible sur le serveur (hdd local)
    ResultTailleHdd=df /dev/sda3
    EspaceUtilise=$(echo ${ResultTailleHdd:-6}|cut -d"%" -f1)
    EspaceRestant=$(expr 100-$EspaceUtilise)
     
    echo "">>EspaceFtp.log
    echo "Espace total restant sur le serveur " $HOSTNAME " : " $TailleRepFtpInformatique "%">>EspaceFtp.log
     
    # Test si l'espace disponible est inferieur à 30% (càd ~20Go) : prévenir par mail
    if [ expr $EspaceRestant<30 ];then
        Subject="[ATTENTION] Manque de place sur www.toto.fr"
        Body="Il ne reste que " $EspaceRestant "% d'espace libre sur le serveur. Veuiller faire rapidement de la place."
        Pj="EspaceFtp.log"
        EnvoiMail() "$Subject" "$Body" "$Pj"
    fi
    J'ai besoin de vous pour 2 choses :
    - me corriger le script s'il y a des erreurs (avec des explications svp)
    - m'expliquer comment je peux tester ce script ligne à ligne car je ne sais pas comment le tester en "mode pas à pas"

    Merci à tous

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Tu as quelques soucis avec find - voir les commentaires dans ton code.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    #!/bin/bash
     
    # Suppression du fichier de log
    rm -f /var/www/vhosts/toto.fr/web_users/EspaceFtp.log
     
    # Changement du répertoire courant
    cd /var/www/vhosts/toto.fr/web_users
     
    # Boucle pour traiter tous les répertoires clients (dans web_users) mais non récursivement (1 seul niveau)  : pour réaliser une liste.
    ListeWebUsers="$(find * -maxdepth 0 -type d)" ## find * n'existe pas. find / pour chercher a la racine, find <repertoire> pour un repertoire specifique
    for WebUsers in ${ListeWebUsers};do
     
        # Calcul de l'espace occupé par le client
        ResultTailleRepWebUsers=$(du -sm $WebUsers)
        TailleRepWebUsers=$(echo $ResultTailleRepWebUsers|cut -d " " -f1)
     
        # Gros clients : Test si la taille est > 5 Go
        if [ $TailleRepWebUsers>5000 ];then
            # Envoi d'un mail pour nous prévenir (EnvoiMail() $Subject $Body)
            Subject="[" $WebUsers "] L'espace utilisé sur leur serveur ftp est trop importante : "$TailleRepWebUsers "Mo"
            Body="Veuillez demander au client de supprimer les anciens fichiers rapidement."
            Pj=""
            EnvoiMail() "$Subject" "$Body" "$Pj"
        fi
     
        # Suppression des fichiers vieux de plus d'un mois
        find /$WebUsers -mtime +30 -print -exec rm -fR {} + >> EspaceFtp.log ## je ne pense pas que tu aies besoin du / avant le $WebUsers
     
        # Suppression des répertoires vides
        find /$WebUsers/* -type d -empty|xargs rm -fR ## je ne pense pas que tu aies besoin du / avant le $WebUsers
     
        # Remplissage du fichier de suivi EspaceFtp.log
        echo "$WebUsers            $TailleRepWebUsers">>EspaceFtp.log
     
    done
     
    # Récuperation en pourcentage de l'espace restant disponible sur le serveur (hdd local)
    ResultTailleHdd=df /dev/sda3
    EspaceUtilise=$(echo ${ResultTailleHdd:-6}|cut -d"%" -f1)
    EspaceRestant=$(expr 100-$EspaceUtilise)
     
    echo "">>EspaceFtp.log
    echo "Espace total restant sur le serveur " $HOSTNAME " : " $TailleRepFtpInformatique "%">>EspaceFtp.log
     
    # Test si l'espace disponible est inferieur à 30% (càd ~20Go) : prévenir par mail
    if [ expr $EspaceRestant<30 ];then
        Subject="[ATTENTION] Manque de place sur www.toto.fr"
        Body="Il ne reste que " $EspaceRestant "% d'espace libre sur le serveur. Veuiller faire rapidement de la place."
        Pj="EspaceFtp.log"
        EnvoiMail() "$Subject" "$Body" "$Pj"
    fi

    Il n'y a pas de mode pas a pas en shell. Il te faudra donc trouver une autre methode pour tester.

    Je te deconseille fortement de supprimer les fichiers de plus d'un mois d'anciennete sans prevenir avant les clients. S'ils perdent des donnees, ils t'en voudront a mort.

    Ne peux-tu pas deplacer ces fichiers trop vieux vers un repertoire poubelle, et que tu n'effaceras qu'au bout d'un temps plus long, lorsque tu seras certain qu'ils ne risquent pas de t'etre demandes ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    10
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 10
    Par défaut
    Merci pour ces réponses gangsoleil,

    mais je ne comprend toujours pas ou est le pb :
    Si j'exécute la commande find d'origine il me retourne une liste correcte des répertoire. (Si je la modifie d'ailleurs aussi (en enlevant *)).

    Par contre si je lance un script shell qui l'exécute, je n'ai aucun retour.
    Pourrais tu tester ce script chez toi stp et me dire ce qu'il ne va pas (si ce n'est pas trop abusé)

    Pour la suppression brutale, ne te fais pas de soucis : tout est sauvegarder sur un autre serveur grande capacité pour beaucoup plus longtemps.

    Par avance, un grand merci.

  4. #4
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Par défaut
    Bonjour,

    Pour debugger un script, tu peux mettre "set -xv" au debut dudit script : ca va t'afficher la commande qu'il execute, et le resultat - c'est le mode debug du script.

    man set pour plus d'informations.
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  5. #5
    Modérateur
    Avatar de jlliagre
    Homme Profil pro
    Ingénieur support avancé & développement
    Inscrit en
    Juin 2007
    Messages
    2 695
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur support avancé & développement
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 695
    Par défaut
    Citation Envoyé par peuchere Voir le message
    Je suis tout nouveau sous le forum et idem pour le scripting sous linux.
    Si tu est sous Linux, tu n'est pas dans le bon Forum. developpez.net ne considère pas Linux comme un Unix.

Discussions similaires

  1. Script shell pour surveillance de l'espace disque
    Par schranz dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 27/02/2014, 07h54
  2. Réponses: 3
    Dernier message: 14/01/2009, 10h38
  3. Surveillance d'espace disque ?
    Par Alain B. dans le forum Administration
    Réponses: 8
    Dernier message: 30/07/2008, 09h41
  4. Surveillance de l'espace disque disponible
    Par qi130 dans le forum Windows XP
    Réponses: 2
    Dernier message: 27/12/2007, 15h48
  5. Réponses: 1
    Dernier message: 09/02/2007, 22h51

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo