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 :

[Shell] Question sur tail


Sujet :

Shell et commandes GNU

  1. #1
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut [Shell] Question sur tail
    Bonjour,

    Je travaille sous un serveur sous Debian accessible en SSH via Putty (Windows).
    J'ai les droits en lecture sur les fichiers de logs myql et apache.
    Quand je veux voir ce qui se trame là dedans , je fait un : (par exemple)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tail -f /var/log/mysql/queries > tmp
    mais voila cette commande nécessite une opération manuelle.
    Je voudrais savoir si il y a moyen de faire un tail régulièrement
    par un cron par exemple

  2. #2
    Membre expérimenté
    Inscrit en
    Octobre 2005
    Messages
    344
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 344
    Par défaut
    Salut,

    Si tu as déjà les infos dans les logs et que tu as des droits en lecture dessus, pourquoi veux-tu rediriger les infos de ces logs dans un autre fichier ( > tmp ) ??
    De plus, quelle serait la finalité de ton action ? Si c'est pour vérifier les logs que lorsque tu te connectes, je ne voit pas trop l'utilité de le mettre dans un cron ...
    Par contre, si tu veux parser les logs et t'envoyer un mail à chaque fois qu'il y a une erreur par exemple, alors oui, c'est pratique.

  3. #3
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut
    Citation Envoyé par usf70 Voir le message
    Salut,

    Si tu as déjà les infos dans les logs et que tu as des droits en lecture dessus, pourquoi veux-tu rediriger les infos de ces logs dans un autre fichier ( > tmp ) ??
    De plus, quelle serait la finalité de ton action ? Si c'est pour vérifier les logs que lorsque tu te connectes, je ne voit pas trop l'utilité de le mettre dans un cron ...
    Par contre, si tu veux parser les logs et t'envoyer un mail à chaque fois qu'il y a une erreur par exemple, alors oui, c'est pratique.
    parce qu'il est long, très long (plus de deux ans d'utilsation, ça en génére du log)

    Enfait, dans mon cas, je voudrais savoir qu'elle script php éxecute qu'elle requête
    mais je crois que j'ai une idée
    pondre un autre php (inclue dans tous les autres fichiers) qui écrit dans un log l'horaire auquel un utilisateur visite la page et ensuite je compare grace à diff les log mysql à ça

  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
    Est ce que tu pourrais montrer un exemple des données que tu reçois et du résultat que tu voudrais obtenir idéalement ?
    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
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut
    Citation Envoyé par ggnore Voir le message
    Est ce que tu pourrais montrer un exemple des données que tu reçois et du résultat que tu voudrais obtenir idéalement ?
    Euh en entier ???
    c'est un fichier qui fait 691 705 lignes donc je vais vous montrer le début
    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
    /usr/local/mysql/libexec/mysqld, Version: 4.1.22-log. started with:
    Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
    Time                 Id Command    Argument
    071023 11:38:09       1 Connect     skyjoomluser@localhost on
                          1 Init DB     skyjooml
                          1 Query       SELECT * FROM sky_mbf_language WHERE iso='fr'
                          1 Query       SELECT template
     FROM sky_templates_menu
     WHERE client_id = 0
     AND menuid = 0
                          1 Query       DELETE FROM sky_session
     WHERE ( time < '1193129289' )
                          1 Query       SELECT * FROM sky_session WHERE session_id='c20667786aa15c89e9dc70f26718913f'
                          1 Query       SELECT session_id
     FROM sky_session
     WHERE session_id = MD5( 'cd5b99418e785700bffc48f72c9c96f4' )
                          1 Query       INSERT INTO sky_session ( `session_id`,`time`,`username`,`gid`,`guest` ) VALUES ( '7ae3d0502979f633b341e2987498ed5f','1193
    132289','','0','1' )
                          1 Query       SELECT folder, element, published, params
     FROM sky_mambots
     WHERE published >= 1
     AND access <= 0
     AND folder = 'system'
     ORDER BY ordering
                          1 Query       SELECT params
     FROM sky_mambots
     WHERE element = 'jombackup.systembot'
     AND folder = 'system'
                          1 Query       SELECT id, link
     FROM sky_menu
     WHERE menutype = 'mainmenu'
     AND published = 1
     ORDER BY parent, ordering LIMIT 1
                          1 Query       SELECT mbf_content.reference_field, mbf_content.value
    FROM sky_mbf_content AS mbf_content,
       sky_mbf_language as mbf_language
    WHERE mbf_content.language_id=mbf_language.id
            AND mbf_content.published=1
       AND mbf_content.reference_id='1'
       AND mbf_content.reference_table='menu'
            AND mbf_language.mambo='french'
                          1 Query       SELECT template
     FROM sky_templates_menu
     WHERE client_id = 0
     AND menuid = 0
                          1 Query       SELECT template
     FROM sky_templates_menu
     WHERE client_id = 0
     AND menuid = 1
     LIMIT 1
                          1 Query       SELECT template
     FROM sky_templates_menu
     WHERE client_id = 0
     AND menuid = 1
     LIMIT 1
                          1 Query       DELETE FROM sky_session
     WHERE ( time < '1193129289' )
                          1 Query       SELECT * FROM sky_session WHERE session_id='c20667786aa15c89e9dc70f26718913f'
                          1 Query       SELECT session_id
     FROM sky_session
    donc vous voyez le format de ce log
    l'idée serait idéalement qu'à chaque fichier PHP appelé le tail -f du log soit redirigé vers un fichier créer dans /home/user/mysql-queries est qui soit nommé comme la date (au format %Y%m%d) (par php, mais je sais pas si ça peut se faire)

    ou sinon en bash, redirigé ce tail -f du fichier de log vers des fichiers "date de début - date de fin" dans /home/user/mysql-queries par exemple toutes les minutes (cron)

  6. #6
    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,

    Je pense qu'il faut que tu te renseignes précisément sur ce que fait tail -f sur ton système...

    En général, tail -f affiche les X dernières lignes du fichier, puis continue pour afficher les lignes qui pourraient se rajouter, sans jamais se finir.

    Comment donc faire pour lancer ce programme depuis la crontab, puis l'arréter ???


    Pourquoi ne pas chercher à configurer tes logiciels pour qu'ils écrivent leurs logs dans des fichiers tournants de taille plus raisonnable ?
    "La route est longue, mais le chemin est libre" -- https://framasoft.org/
    Les règles du forum

  7. #7
    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
    Si l'objectif est de croiser les logs MySQL et les noms de tes scripts PHP, tu n'arriveras pas à tes fin avec un simple tail sur les fichiers de log de MySQL.

    Comme le dit gangsoleil, tail -f affiche en permanence sur la console les dernières lignes ajoutées au fichier. Faut toujours faire un Ctrl-C pour arrêter un tail -f. Sinon, fais un tail -1000 pour afficher les 1000 dernières lignes du fichier et récupérer la main. Si tu "crones" un tail -f toutes les minutes, chaque commande que tu lanceras ne se termineras jamais et là, tu vas vite blinder ton système.

    Par ailleurs, en analysant simplement un fichier dans lequel figurent toutes les requêtes MySQL exécutées en concurrence, comment feras-tu la différence entre telle requête exécutée par tel script et telle autre requête exécutée en même temps par tel autre script ?

    Je suis 100% d'accord avec gangsoleil : il faut plutôt que tu mettes en place un système de traces côté PHP, ce sera plus pertinent et facile à faire. Pour faire des fichiers tournants, regarde du côté du rotatelog d'Apache, y a peut-être moyen de l'utiliser.

  8. #8
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut
    Citation Envoyé par gangsoleil Voir le message
    En général, tail -f affiche les X dernières lignes du fichier, puis continue pour afficher les lignes qui pourraient se rajouter, sans jamais se finir.Comment donc faire pour lancer ce programme depuis la crontab, puis l'arréter ???
    mon idée était de commencer un tail en user à un instant t
    et de le stopper avec un ps et un kill (en root)[/quote]
    Citation Envoyé par gangsoleil Voir le message
    Pourquoi ne pas chercher à configurer tes logiciels pour qu'ils écrivent leurs logs dans des fichiers tournants de taille plus raisonnable ?
    c'est ce que j'aimerais faire et surtout avec le format que je veux
    mais voila je sai_s pas comment faire.
    si tu veux bien m'aider, je t'en serais reconnaissant

  9. #9
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Si tu "crones" un tail -f toutes les minutes, chaque commande que tu lanceras ne se termineras jamais et là, tu vas vite blinder ton système.
    avec un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    kill $(ps -ef | grep tail | grep -v grep | awk '{print $2}')
    le processus tail s'arrétera (même si cette commande est lancée avec les privilèges de l'utilisateur qui a initié le tail)

  10. #10
    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
    ps -ef | grep tail | grep -v grep | awk '{print $2}'
    équivaut à
    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

  11. #11
    Membre éprouvé
    Homme Profil pro
    Technophile Web
    Inscrit en
    Mai 2007
    Messages
    930
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Technophile Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 930
    Par défaut
    Citation Envoyé par ggnore Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps -ef | grep tail | grep -v grep | awk '{print $2}'
    équivaut à
    merci je ne connaissais pas cette commande
    mais je préfère utiliser ma méthode
    je préfère les méthodes POSIX
    en effet, ces plus pratique quand on chande système Unix (ps fonction sous Darwin, Bsd, Solaris, Linux, et les autres je sais pas j'ai pas testé)

  12. #12
    Membre expérimenté
    Inscrit en
    Octobre 2005
    Messages
    344
    Détails du profil
    Informations forums :
    Inscription : Octobre 2005
    Messages : 344
    Par défaut
    Alors ru peux regarder du côté de "pkill" qui te permet de killer par exemple tous les process "tail" pour un user determiné:
    http://www.iti.cs.tu-bs.de/cgi-bin/U...an-cgi?pkill+1
    Par exemple ce code va killer tous les process mplayer du user toto:
    Mais je suis d'accord avec les autres ... Plutôt mettre une redirection des logs au niveau de ton code PHP ... Maintenant, tu peux mettre en place (laborieux je te l'accorde) un code qui va scruter la syslog et récuperer tout ce qu'il faut depuis la dernière fois qu'il a tourné, avec au passage, une mise en page telle que tu le souhaites ...

Discussions similaires

  1. une petite question sur des arguments du unix shell
    Par kinkichin dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 22/09/2009, 12h25
  2. Deux questions sur "Call Shell"
    Par maban dans le forum VBA Access
    Réponses: 1
    Dernier message: 10/08/2007, 16h38
  3. Réponses: 2
    Dernier message: 28/07/2007, 01h21
  4. Questions sur le shell Bash
    Par Olivier Regnier dans le forum Shell et commandes GNU
    Réponses: 4
    Dernier message: 07/09/2006, 18h19
  5. Quelques petites questions sur le shell
    Par Badaboumpanpan dans le forum Linux
    Réponses: 8
    Dernier message: 01/04/2006, 00h09

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