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 :

Besoin d'aide sur un script bash avec redirection et tail


Sujet :

Shell et commandes GNU

  1. #1
    Invité
    Invité(e)
    Par défaut Besoin d'aide sur un script bash avec redirection et tail
    Bonjour
    je suis en train d'élaborer un script Bash dont voici le principe :
    J'ai un process en tache de fond dont la sortie est redirigée sur un fichier sortie.log
    Un job Cron analyse la fin ce fichier avec la commande tail -n 1000 sortie.log | grep ....

    Le problème c'est que plus mon fichier sortie.log est long (plusieurs Mo), plus le "tail -n 1000" prends du temps, et il fini par durer trop longtemps (j'execute le script sur une plateforme Atheros AR9330 avec un proc à seulement 400 MHz)

    Quel serait l'astuce pour transformer en une sorte de FIFO de taille limitée mon fichier sortie.log (les premières lignes étant traitées, je n'en ai plus besoin) et faire en sorte que mon tail -n soit ainsi toujours rapide

    Voila, si ce n'est pas assez clair, dites moi, je compléterai.

    merci en tout cas

  2. #2
    Expert éminent sénior Avatar de Flodelarab
    Homme Profil pro
    Inscrit en
    Septembre 2005
    Messages
    5 243
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations forums :
    Inscription : Septembre 2005
    Messages : 5 243
    Points : 13 458
    Points
    13 458
    Par défaut
    Bonjour,

    J'ai du mal à croire que le tail prenne du temps. Dans l'exemple que tu donnes, le tail est le premier élément d'une conduite (enchaînement de commandes séparées par des pipes). Ne serait-ce pas les commandes suivantes qui prennent du temps?
    Cette réponse vous apporte quelque chose ? Cliquez sur en bas à droite du message.

  3. #3
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 101
    Points : 5 849
    Points
    5 849
    Par défaut
    Citation Envoyé par blachzero Voir le message
    Un job Cron analyse la fin ce fichier avec la commande tail -n 1000 sortie.log | grep ....
    Et si, entre 2 cron, plus de 1000 lignes ont été générés, on ignore celles qui sont sautées?

    ça paraît un peu bizarre comme manière de faire.

    Quel serait l'astuce pour transformer en une sorte de FIFO de taille limitée mon fichier sortie.log (les premières lignes étant traitées, je n'en ai plus besoin) et faire en sorte que mon tail -n soit ainsi toujours rapide
    Il me semble que la commande tail -f (lecture en continu du fichier) est toute indiquée pour ce genre de job!

  4. #4
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Flodelarab Voir le message
    Bonjour,
    J'ai du mal à croire que le tail prenne du temps. Dans l'exemple que tu donnes, le tail est le premier élément d'une conduite (enchaînement de commandes séparées par des pipes). Ne serait-ce pas les commandes suivantes qui prennent du temps?
    Si si, j'ai testé "à la main" la commande, plus le fichier est gros, et plus elle prends de temps

    Citation Envoyé par jack-ft Voir le message
    Et si, entre 2 cron, plus de 1000 lignes ont été générés, on ignore celles qui sont sautées?
    ça paraît un peu bizarre comme manière de faire.
    C'est vrai, j'ai fixé à 1000 comme ça, mais c'est pas terrible.

    Citation Envoyé par jack-ft Voir le message
    Il me semble que la commande tail -f (lecture en continu du fichier) est toute indiquée pour ce genre de job!
    Oui mais ça ne règlerai pas le problème de la taille de mon fichier sortie qui va ne fera que grandir (problème de stockage)

    La sortie de mon programme en tâche de fond est constituée de lignes horodatées, qu'il faut vérifier et parser pour stockage en base de données.
    Chaque minute mon cron lance un bash qui sélectionne parmis les 1000 dernières lignes de mon fichier sortie les lignes horodatées à T-1 minute avec un grep puis il parse le résultat avec une boucle while read IFS

    Ca fait peut être un peu bricolage mais j'ai pas vraiment trouvé d'autre moyen.

  5. #5
    Expert éminent sénior Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 278
    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 278
    Points : 12 726
    Points
    12 726
    Par défaut
    Bonjour,

    Pour pouvoir aider, il faudrait nous montrer ton script ainsi qu'un bout de log si c'est possible.

    Moi, ce que je ne comprends pas c'est l'utilité de la crontab...
    Cordialement.

  6. #6
    Expert éminent sénior Avatar de frp31
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Juillet 2006
    Messages
    5 196
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Juillet 2006
    Messages : 5 196
    Points : 12 264
    Points
    12 264
    Par défaut
    tu peux tout à fait utiliser un FIFO pour ça ....

    ton cron appelle un script au lieu du tail

    ton script vérifie le FIFO si il existe pas il le crée (/dev/fifo par exemple)



    par exemple j'utilise ça pour compresser à la volée des volumes trop important qui ne peuvent pas etre un simple programme > fichier.log quand je manque de place mais que j'ai un besoin absolu de garder le log de l'action en cours.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    mknod /dev/MADONA_pipe_export p 
       # creer le FIFO
    cat /dev/MADONA_pipe_export | /usr/bin/compress > $REP_SAVE/MADONA$DATE.log.Z & 
       #lire le contenu du fifo et le renvoyer dans le fichier
    programme 2>&1 /dev/MADONA_pipe_export 
       # compresse le log à la volée.

  7. #7
    Invité
    Invité(e)
    Par défaut
    @frp31
    Je viens d'expérimenter, un tube nommé et je n'ai plus de souci de place ou de rotation.

    Merci pour le coup de main.

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

Discussions similaires

  1. Besoin d'aide sur action script svp
    Par delavega dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 21/03/2014, 10h58
  2. Besoin d'aide sur un script shell
    Par zrzdzdze dans le forum Linux
    Réponses: 2
    Dernier message: 16/02/2012, 08h24
  3. besoin d'aide pour un script bash
    Par llove dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 18/05/2011, 13h15
  4. Besoin d'aide sur un script SQL de recherche
    Par agougeon dans le forum Langage SQL
    Réponses: 5
    Dernier message: 26/10/2005, 11h40

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