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

Linux Discussion :

Demande de critiques


Sujet :

Linux

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut Demande de critiques
    Bonjour.

    J'ai repris un vieux script ce matin, et j'ai facilité sa modification ainsi que sa gestion des erreurs.

    edit:1ere maj
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    #!/bin/sh
    # repertoire ou se trouve la base de donnees
    destdir=/var/lib/squidguard
    # repertoire des logs de squid
    logdir=/var/log/squid
     
    # fichier de log pour savoir si le telechargement s'est bien deroule
    logfile=$logdir/updsgdb.log
     
    # site ftp
    ftp_url=ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/
    # fichier de blacklisting
    blfile=blacklists.tar.gz
     
    #fonction permettant la gestion d'erreurs
    launch() {
            cmd=$1
            err=$2
     
            echo $cmd | tee -a $logfile && eval "$cmd >> $logfile 2>&1"
     
            if [ $? -ne 0 ]
                    then
                    echo "ERREUR : $err" | tee -a $logfile
                    exit
            fi
    }
     
    # Chargement des BLACKLISTS
    cd $destdir
    # entete du fichier journal
    echo ---------------------------------------- > $logfile
    echo TELECHARGEMENT DES BLACKLISTS POUR SQUID >> $logfile
    echo ---------------------------------------- >> $logfile
    date >> $logfile
    echo "fichier de log : $logfile"
     
     
    #sauvegarde de l'ancienne blacklist
    echo "#sauvegarde de l'ancienne blacklist"
    if [ -f "$destdir/$blfile" ]
    then
            launch "mv -v $destdir/$blfile $destdir/$blfile.bak" "sauvegarde de l'ancienne blacklist a echoue"
    fi
     
    #telechargement de la blacklist
    echo "#telechargement de la blacklist"
    launch "wget -N -P $destdir $ftp_url$blfile" "fichier ftp blacklists $blfile NON TROUVE"
     
    # Decompression du fichier recupere
    echo "# Decompression du fichier recupere"
    launch "tar xvzf $destdir/$blfile -C $destdir/blacklists/" "repertoire blacklists INTROUVABLE"
    # suppression de l'archive
    echo "#suppression de l'archive"
    launch "rm -v -f $destdir/$blfile" "la suppression a echoue"
     
    # changement de proprietaire pour que squid puisse fonctionner
    # on a maintenant besoin d'une liste
    echo "# changement de proprietaire pour que squid puisse fonctionner"
    launch "chown -R proxy:proxy $destdir/blacklists $destdir/db" "le changement de proprietaire a echoue"
     
    # arret de squid
    echo "#arret de squid"
    launch "/etc/init.d/squid stop" "l'arret de squid a echoue"
    echo $cmd && eval $cmd
     
    # mise a jour de la base de donnees
    echo "#mise a jour des bases squidguard"
    launch "/usr/bin/squidGuard -C all" "la mise a jour de la bdd a echoue"
     
    # redemarrage de squid
    echo "#redemarrage de squid"
    launch "/etc/init.d/squid start" "le redemarrage de squid a echoue"
    Les messages d'erreur ne sont pas forcément très adaptés, je crois que je vais rajouter dedans le code retour renvoyé par l'outil utilisé en cas d'erreur.

    Ce script est lancé dans la crontab, le double affichage avec les commentaires est volontaire. Il permet d'avoir un affichage causant dans le mail que je reçois lorsque le script est lancé.

    La fonction launch me permet une gestion plutôt souple des erreurs.

    Je ne cherche pas à me faire mousser parceque j'ai pondu un script de 20 lignes, mais plutôt de profiter de votre expérience

    Que pourrais rajouter pour obtenir un code meilleur ?
    Y a t il de possible failles dans ce script ?
    J'aimerai également savoir s'il existe une variable permettant de connaître le nombre de paramètres envoyés à une fonction ? (je vais chercher dans la doc ksh de marcg ...)


    Je suis prêt à entendre toutes les remarques.

    Merci d'avance.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  2. #2
    Membre chevronné
    Avatar de bster
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    372
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mai 2005
    Messages : 372
    Par défaut
    salut
    personnellement à par ajouter du controle d'erreur suplementaire avec des messages d'erreur bien clairs.... c'est tout ce que j'ajouterai ....

  3. #3
    Membre Expert

    Profil pro
    Inscrit en
    Mars 2004
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 1 296
    Par défaut
    ne nombre de parametre d'une fonction ou d'un script :
    $#
    ....

  4. #4
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Citation Envoyé par MarcG
    ne nombre de parametre d'une fonction ou d'un script :
    $#
    ....
    ok ,je croyais que c'était juste pour les scripts.
    La variable est donc écrasée dés qu'une fonction du script est appelée.

    merci.

    J'ai encore quelques petites rectifications à faire sur ce script. Le genre d'erreur qu'on ne peut pas voir en lisant le code.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  5. #5
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Je jouerai également sur les sorties d'erreur et le code de sortie.

    Pour afficher un message sur la sortie d'erreur :
    Pour le code de sortie, le code 0 (par défaut, le code renvoyé par "exit") est réservé pour dire que tout s'est bien passé. Tu peux utiliser des codes différents (exit 1, exit 300, etc.) pour signifier plusieurs cas d'erreur différent si nécessaire. Sinon, de manière générale, on utilise 1.

  6. #6
    Expert confirmé
    Avatar de Katyucha
    Femme Profil pro
    DevUxSecScrumOps Full Stack Bullshit
    Inscrit en
    Mars 2004
    Messages
    3 287
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Irlande

    Informations professionnelles :
    Activité : DevUxSecScrumOps Full Stack Bullshit

    Informations forums :
    Inscription : Mars 2004
    Messages : 3 287
    Par défaut
    Citation Envoyé par _Mac_
    Je jouerai également sur les sorties d'erreur et le code de sortie.

    Pour afficher un message sur la sortie d'erreur :
    Pour le code de sortie, le code 0 (par défaut, le code renvoyé par "exit") est réservé pour dire que tout s'est bien passé. Tu peux utiliser des codes différents (exit 1, exit 300, etc.) pour signifier plusieurs cas d'erreur différent si nécessaire. Sinon, de manière générale, on utilise 1.
    C'est exactement ce que launch() lui permet de faire.

    Peut etre rajouter une temporisation si tu récupères pas le fichier de la blacklist.
    Le fichier arrive quand normalement (automatique ou manuel?) ? Es tu sur qu'il sera la ?
    Si le wget échoue : mail envoyé a l'admin, plus temporisation de 3 minutes, 3 retry puis abandon....

  7. #7
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Citation Envoyé par Katyucha
    Citation Envoyé par _Mac_
    Je jouerai également sur les sorties d'erreur et le code de sortie.

    Pour afficher un message sur la sortie d'erreur :
    Pour le code de sortie, le code 0 (par défaut, le code renvoyé par "exit") est réservé pour dire que tout s'est bien passé. Tu peux utiliser des codes différents (exit 1, exit 300, etc.) pour signifier plusieurs cas d'erreur différent si nécessaire. Sinon, de manière générale, on utilise 1.
    C'est exactement ce que launch() lui permet de faire.

    Peut etre rajouter une temporisation si tu récupères pas le fichier de la blacklist.
    Le fichier arrive quand normalement (automatique ou manuel?) ? Es tu sur qu'il sera la ?
    Si le wget échoue : mail envoyé a l'admin, plus temporisation de 3 minutes, 3 retry puis abandon....
    Je vais effectivement rajouter le code erreur dans le message d'erreur renvoyé. Cependant je ne vois pas d'intérêt à rajouter un code erreur au script en lui même : il est en bout de chaîne, il n'y a aucun autre script qui le lance et mon système d'erreur est déjà bien assez causant comme cela pour ne pas en rajouter une couche qui, de plus, ne sera en aucun cas utilisé.

    Mais pour le moment je merdouille avec mon fichier de log : il ne semble pas être écrit du tout.
    Je vais mettre à jour le source qu'il y a dans le premier message.

    Ce script est lancé par la crontab tous les jours. Dans tous les cas je reçois un mail affichant tout le script et son déroulement.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  8. #8
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    ok, j'avais oublié un '/' dans ma variable logfile ...

    Le message d'erreur est trop abscons et je ne peux pas générer un message en fonction de ce qui se passe puisque l'échec peut avoir plusieurs cause.

    Je vais me contenter d'envoyer à la fonction le rôle de la commande, comme ça je pourrais intégrer l'affichage du commentaire (tous mes echo "#...") à la fonction launch.

    Dans le message d'erreur, je vais mettre le code que renvoie la fonction qui échoue.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  9. #9
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Je recherche la méthode avec CAT et EOF pour afficher un portion de texte (je voudrais éviter la séquence des echo au début du script qui est moche, et enplus il y a un redirection à chaque fois)

    ça peut paraître de ma part de vouloir perfectionner ce script, puisqu'il peut très bien marcher sans toutes ces fioritures, mais j'ai une série d'autres scripts que je voudrais refaire proprement ... Ce script va un peu me servir de base pour tout bien refaire.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  10. #10
    Membre Expert

    Inscrit en
    Mai 2002
    Messages
    720
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 720
    Par défaut
    Citation Envoyé par ggnore
    Je recherche la méthode avec CAT et EOF
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    cat << bar >> foo.txt
    Lalala je vais aller
    a la peche au
    bar
    Concatene a foo.txt tout ce qui est avant bar

  11. #11
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Par défaut
    Citation Envoyé par Katyucha
    C'est exactement ce que launch() lui permet de faire.
    Il est où le >&2 ???

    Au risque de paraître lourd : le code de sortie > 0 me semble intéressant pour détecter par exemple les cas où la récupération du fichier par wget a foiré.

    Sinon, aussi, faire une fonction log qui utilise tee et qui t'évite surtout d'avoir à faire des >> $logfile tout le temps.

  12. #12
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    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
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    #!/bin/sh
    # Mise a jour automatique des bases SquidGuard
     
    # repertoire ou se trouve la base de donnees
    destdir=/var/lib/squidguard
    # repertoire des logs de squid
    logdir=/var/log/squid
     
    # fichier de log pour savoir si le telechargement s'est bien deroule
    logfile=$logdir/updsgdb.log
     
    # site ftp
    ftp_url=ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/
    # fichier de blacklisting
    blfile=blacklists.tar.gz
     
    #gestion d'erreurs et logs
    launch() {
            cmd=$1
            purpose=$2
     
            echo "#$2" | tee -a $logfile
            echo $cmd | tee -a $logfile && eval "$cmd >> $logfile 2>&1"
     
            if [ $? -ne 0 ]
                    then
                    echo "ERREUR $? : $err" | tee -a $logfile
                    exit
            fi
    }
     
    #entete et log
    entete() {
    cat << EOF
    ----------------------------------------
    TELECHARGEMENT DES BLACKLISTS POUR SQUID
    ----------------------------------------
    `date`
    logfile=$logfile
     
    EOF
    }
     
    # Chargement des BLACKLISTS
    cd $destdir
    # entete du fichier journal
    entete | tee $logfile
     
    #sauvegarde de l'ancienne blacklist
    if [ -f "$destdir/$blfile" ]
    then
            launch "mv -v $destdir/$blfile $destdir/$blfile.bak" "sauvegarde de l'ancienne blacklist"
    fi
     
    #telechargement de la blacklist
    launch "wget -N -P $destdir $ftp_url$blfile" "telechargement ftp de la blacklist"
     
    # Decompression du fichier recupere
    launch "tar xvzf $destdir/$blfile -C $destdir/blacklists/" "Decompression du fichier downloade"
     
    # suppression de l'archive
    launch "rm -v -f $destdir/$blfile" "Suppression de l'archive"
     
    # changement de proprietaire pour que squid puisse fonctionner
    # on a maintenant besoin d'une liste
    launch "chown -R proxy:proxy $destdir/blacklists $destdir/db" "changement de proprietaire"
     
    # arret de squid
    launch "/etc/init.d/squid stop" "Arret de squid"
    echo $cmd && eval $cmd
     
    # mise a jour de la base de donnees
    launch "/usr/bin/squidGuard -C all" "Mise a jour de la bdd squidguard"
     
    # redemarrage de squid
    launch "/etc/init.d/squid start" "Redemarrage de squid"
    Voilà ce que ça donne au final...

    Pourtant il manque encore un truc...

    Pour mv et rm, j'ai mis -v pour que ça soit en mode verbose.
    Cependant, dans mon fichier de log le mode verbose de dit rien.

    je pense que c'est cette ligne qui pose problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo $cmd | tee -a $logfile && eval "$cmd >> $logfile 2>&1"
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  13. #13
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Hum ... normal qu'ils disent rien : ils ne font rien.

    Bon béh j'enlève le rm, et puis c'est la version finale.

    Je usis toujours ouvert aux critiques.

    Merci à vous.
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

Discussions similaires

  1. Demande de critiques constructives - Code C
    Par Reverse_ dans le forum C
    Réponses: 3
    Dernier message: 10/01/2015, 10h56
  2. Réponses: 6
    Dernier message: 18/02/2010, 21h40
  3. demande de critique
    Par monidoua dans le forum Mon site
    Réponses: 4
    Dernier message: 01/12/2006, 13h29

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