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

Shell et commandes GNU Discussion :

Script ménage Filesystem


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut Script ménage Filesystem
    Bonjour,

    Je souhaiterais mettre en place un script qui, sur 3 serveurs Server1, Server2, Server3 :

    - donne le taux d'occupation du FS / ( commande /bin/df -h / | grep -v -E 'Filesystem|mapper' | awk '{print $(NF-1)}' ).
    - si le chiffre trouvé (taux) sans le signe "%" est supérieur à 75 (75%) alors on supprime les fichiers toto*.
    - redonne le taux après ménage.
    - le tout mentionné dans un fichier /home/kevin/Output.txt

    En principe on utilise la simple quote avec rsh mais dans ce cas ça marche pas du tout.

    En faisant comme ci-dessous, pas d'erreur dans la forme en rendant verbeux le script mais un souci avec le taux qui n'est pas celui attendu à chaque exécution de la boucle for.

    En effet le taux qui sort à chaque fois est celui du FS / du serveur sur lequel se trouve le script et non pas ceux sur mes 3 serveurs Server1, Server2 et Server3.

    Mon script :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for Server in Server1 Server2 Server3; do
            echo "  "
            echo "$Server :"
            rsh "$Server" "echo 'Taux occupation du FS / avant menage :'  `/bin/df -h / | grep -v -E 'Filesystem|mapper' | awk '{print $(NF-1)}'` "
            rsh "$Server" "if [ `/bin/df -h / | grep -v -E 'Filesystem|mapper' | awk '{print $(NF-1)}' | sed '$ s/.$//'` -gt 75 ]; then rm -f /home/kevin/toto*; fi"
            rsh "$Server" "echo 'Taux occupation du FS / apres menage :'  `/bin/df -h / | grep -v -E 'Filesystem|mapper' | awk '{print $(NF-1)}'` "
    done > /home/kevin/Output.txt
    Je viens vous demander votre avis et conseils.

    Merci.

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    Normal, la chaine entre guillemet est évaluée avant d'être transmise, donc le df est fait en local et juste le résultat est transmis au serveur pour le echo.

    Faut juste protéger les backquotes avec des anti-slash pour qu'elles ne soient évalué que lors du echo et non pas lors de l'envoi au serveur.

  3. #3
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    Merci pour ta réponse.

    J'ai amélioré un peu le code (avec un awk au lieu d'un grep suivi d'un awk) puis ai protégé les backquotes par des anti-slash mais ça marche pas.

    Peut-être j'ai pas bien protégé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    for Server in Server1 Server2 Server3; do
            echo "  "
            echo "$Server :"
            rsh "$Server" "echo 'Taux occupation du FS / avant menage :' \`/bin/df -Ph / | awk '/mapper/ {print $5}'\` "
            rsh "$Server" "if [ \`/bin/df -Ph / | awk '/mapper/ {print $5}' | sed '$ s/.$//'\` -gt 75 ]; then rm -f /home/kevin/toto*; fi"
            rsh "$Server" "echo 'Taux occupation du FS / apres menage :' \`/bin/df -Ph / | awk '/mapper/ {print $5}'\` "
    done > /home/kevin/Output.txt

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 335
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 335
    Par défaut
    C'est quoi l'erreur remonté ?

    Le souci ne serait pas sur le awk ?
    (car le $ de $5 n'est pas protégé et donc interprété par le shell local)

  5. #5
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    En effet, le awk renvoie tous les champs du df et pas que le 5ème .... je peux protéger le $ avec un \ tu penses ?

  6. #6
    Membre confirmé
    Homme Profil pro
    Analyse système
    Inscrit en
    Août 2020
    Messages
    160
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Analyse système
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2020
    Messages : 160
    Par défaut
    Avec des \ devant les $ contenus dans les awk ça a l’air de faire le job 😜

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. script unix ménage
    Par diftdift dans le forum AIX
    Réponses: 1
    Dernier message: 14/12/2010, 14h41
  2. script pour la taille des filesystem
    Par moi26 dans le forum Administration
    Réponses: 1
    Dernier message: 09/04/2009, 17h17
  3. [Script VBS] Faire le ménage dans le registre
    Par Jeetiz dans le forum VBScript
    Réponses: 2
    Dernier message: 15/01/2007, 11h38
  4. Réponses: 2
    Dernier message: 31/05/2006, 09h58

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