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

Administration système Discussion :

[shell script] redirections multiples (mal gerées)


Sujet :

Administration système

  1. #1
    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 [shell script] redirections multiples (mal gerées)
    Salut

    But du binz

    ecrire dans plusieurs logs le resultat de la même action.... le tout en direct live ..

    me suis dit suffit de faire un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/ksh
    ....
    [ -f /dev/fifo ] || mknod /dev/fifo p
    ....
    for i in 1 2 3 4 5 6 7 8 9 0 ; do $(more /dev/fifo >> /tmp/FP$i &) ; done
     ...
    action() > /dev/fifo
    rm /dev/fifo
    exit 0
    là formidable je vois mes logs sauf que ....hé oui....
    au lieu d'avoir $LOG1 $LOG2 $LOG3 $LOG4 avec les memes infos dedans

    certaines infos sont dans le 1 d'autres dans le 2 , 3 ou le 4 mais aucune log ne contient le tout. (ce que je voulais bien sur).

    si je fais un fichier log1 à 4 nouveau
    et que je fais un j'ai le contenu complet !

    je voulais juste avoir à l'identique les 4 logs sachant que je ne peut pas faire
    action > log et des copies après !!!!!


    j'obtiens par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    -rw-r--r--  1 root root 297898 2007-09-05 14:49 /tmp/FP1
    -rw-r--r--  1 root root      0 2007-09-05 14:48 /tmp/FP2
    -rw-r--r--  1 root root 294917 2007-09-05 14:49 /tmp/FP3
     
    cat /tmp/FP? | wc -c
    592815
     
    cat /data/source/TEST_FP | wc -c
    592815
    j'esperai obtenir des /tmp/FP* chacun identiques à /data/source/TEST_FP

    bref comment je peux faire ?

    J'ai testé ça pour voir :
    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
     
     /tmp# for i in 1 2 3 4 5 6 7 8 9 0 ; do $(more /dev/FP >> /tmp/FP$i &) ; done
     /tmp# cat /var/log/messages > /dev/FP
     /tmp# ll /tmp
    total 632
    -rw-r--r--  1 root root 102438 2007-09-05 15:33 FP0
    -rw-r--r--  1 root root 188454 2007-09-05 15:33 FP1
    -rw-r--r--  1 root root 163878 2007-09-05 15:33 FP2
    -rw-r--r--  1 root root  86054 2007-09-05 15:33 FP3
    -rw-r--r--  1 root root  28710 2007-09-05 15:33 FP4
    -rw-r--r--  1 root root  24516 2007-09-05 15:33 FP5
    -rw-r--r--  1 root root     38 2007-09-05 15:33 FP6
    -rw-r--r--  1 root root     38 2007-09-05 15:33 FP7
    -rw-r--r--  1 root root     38 2007-09-05 15:33 FP8
    -rw-r--r--  1 root root     38 2007-09-05 15:33 FP9
     /tmp#
    ça ne semble pas fonctionner comme methode.....
    c'est vraiment domage....si vous savez comment faire....

    c'est donc une question de méthode et pas une erreur de technique...

  2. #2
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Et tu as jeté un oeil du côté de tee ?
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  3. #3
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Si j'ai tout suivi, c'est facile à faire avec ZSH.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    more /dev/FP >> /tmp/FP1 >> /tmp/FP2 >> /tmp/FP3
    Ou :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    cmd=$(for i ({1..10}) echo -n ">> in$i ")
    eval more /dev/FP $cmd
    Avec Bash, tu t'en sors avec tee :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    more /dev/FP | tee -a /tmp/FP1 | tee -a /tmp/FP2 | tee -a /tmp/FP3

  4. #4
    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
    quel ane !

    je me souvenais plus qu'on pouvais enchainner les redirections >>

    bon ducoup j'ai bien tous les infos passant par le fifo FP crées à l'identiques dans tous les fichiers FP1 à FP0 et chacun de ces logs recevant aussi des infos d'autres sources...

    c'est nickel

    ça marche bien mieux d'un coup là c'est tellement simple que ça fait peur d'avoir oublié un truc si évident.

    le bout de code actif est bien sur devenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    (more /dev/fifo >> /tmp/FP1 >> /tmp/FP2 >>..... >> /tmp/FP0) &
    action() > /dev/fifo
    ps : avec tee ça marche aussi apparement

  5. #5
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    Citation Envoyé par frp31 Voir le message
    je me souvenais plus qu'on pouvais enchainner les redirections >>
    Ksh gère ça ? Bash ne le fait pas en tout cas (il se contente d'ouvrir les premiers fichiers sans rien écrire, ce qui est extrêmement désagréable).

  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
    bon finalement ça ne marche pas bien meme en ksh
    ça depand si la machine est occupée ou pas car selon la charge le temps de copie du fifo permet de remplir tous les fichiers à l'identique ou à la volée (morceaux/morceaux)...

    de même avec tee

    donc finalement la methode est mauvaise...

  7. #7
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Et pourquoi faire plusieurs logs à la volée alors que tu pourrais faire un seul log et le copier ensuite ?
    (j'ai pas vu de traitements concurrents à l'écriture dans les logs)
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  8. #8
    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
    comme je l'ai marqué plus haut c'est justement ce que je veux pas !
    parceque les logs ne sont pas identiques !
    elles recoivent de ce script là seulement des infos identiques mais d'autres scripts ecrivent chacuns dans un des log n°0 à n°9

    ce n'est à etre identique que pour valider le test d'ecriture dans X fichiers logs.

  9. #9
    LLB
    LLB est déconnecté
    Membre expérimenté
    Inscrit en
    Mars 2002
    Messages
    967
    Détails du profil
    Informations forums :
    Inscription : Mars 2002
    Messages : 967
    Points : 1 410
    Points
    1 410
    Par défaut
    En relisant ton code, je ne comprends pas l'intérêt de la fifo, en fait.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    action() >> /tmp/FP1 >> /tmp/FP2 >> /tmp/FP3
    Quel est le problème ?

    Sinon, passer par un fichier intermédiaire devrait donner le même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    action() > /tmp/log
    cat /tmp/log >> /tmp/FP1
    cat /tmp/log >> /tmp/FP2
    Désolé si je donne l'impression d'insister, mais je n'ai pas compris le problème avec le temps de charge.

  10. #10
    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
    le fifo sera utile dans le script réel pour l'instant en test il sert à rien parceque le binaire n'est pas actif dans la fonction action() et bien sur y'a d'autres scripts qui utilises ce qui passent sur le fifo pour faire des traitements ou pour y envoyer des resultats qui seront eux aussi loggués sur certains fichiers /tmp/*

    bref le fifo n'a pas de sens actuellement mais quand on passera en qualif puis en prod oui

  11. #11
    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
    arf l'astuce est toute con....

    suffit de faire un fifo par log....


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

Discussions similaires

  1. Envoi d'une variable en shell script sur php
    Par Ponchi dans le forum Langage
    Réponses: 3
    Dernier message: 07/02/2006, 13h54
  2. Executer en tant que en shell script ?
    Par fabszn dans le forum Linux
    Réponses: 3
    Dernier message: 13/01/2006, 15h08
  3. shell script depuis c
    Par 03011226 dans le forum C
    Réponses: 10
    Dernier message: 08/12/2005, 18h56
  4. Parser une chaine en shell script
    Par Gogoye dans le forum Linux
    Réponses: 10
    Dernier message: 19/07/2004, 17h49
  5. Retour de requete postgresql / Shell Script
    Par doohan dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/06/2003, 18h07

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