Précédent   Forum des professionnels en informatique > Systèmes > Linux > Applications > Shell
Shell Vos questions sur l'utilisation des commandes shell
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 25/10/2007, 13h43   #1
Membre éprouvé
 
Homme Marwan Rabbaa
Technophile Web
Inscription : mai 2007
Messages : 930
Détails du profil
Informations personnelles :
Nom : Homme Marwan Rabbaa

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

Informations forums :
Inscription : mai 2007
Messages : 930
Points : 412
Points : 412
Envoyer un message via MSN à sliderman Envoyer un message via Yahoo à sliderman
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 :
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
__________________
http://aldorande.miniville.fr/ind
Fedora 8, eclipse 3.3 sur x86_64
--------------
Colorer votre code php
sliderman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 15h09   #2
Membre confirmé
 
Inscription : octobre 2005
Messages : 344
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 344
Points : 270
Points : 270
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.
usf70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 16h44   #3
Membre éprouvé
 
Homme Marwan Rabbaa
Technophile Web
Inscription : mai 2007
Messages : 930
Détails du profil
Informations personnelles :
Nom : Homme Marwan Rabbaa

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

Informations forums :
Inscription : mai 2007
Messages : 930
Points : 412
Points : 412
Envoyer un message via MSN à sliderman Envoyer un message via Yahoo à sliderman
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
__________________
http://aldorande.miniville.fr/ind
Fedora 8, eclipse 3.3 sur x86_64
--------------
Colorer votre code php
sliderman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 25/10/2007, 19h53   #4
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 903
Points : 1 903
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.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2007, 09h15   #5
Membre éprouvé
 
Homme Marwan Rabbaa
Technophile Web
Inscription : mai 2007
Messages : 930
Détails du profil
Informations personnelles :
Nom : Homme Marwan Rabbaa

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

Informations forums :
Inscription : mai 2007
Messages : 930
Points : 412
Points : 412
Envoyer un message via MSN à sliderman Envoyer un message via Yahoo à sliderman
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 :
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)
__________________
http://aldorande.miniville.fr/ind
Fedora 8, eclipse 3.3 sur x86_64
--------------
Colorer votre code php
sliderman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2007, 14h49   #6
Modérateur
 
Avatar de gangsoleil
 
R&D en systemes informatiques bas niveau Unix/Linux
Inscription : mai 2004
Messages : 5 496
Détails du profil
Informations personnelles :
Âge : 31
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Activité : R&D en systemes informatiques bas niveau Unix/Linux

Informations forums :
Inscription : mai 2004
Messages : 5 496
Points : 9 677
Points : 9 677
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 ?
__________________
Modérateur "C", "Informatique Générale & Hardware" et "Unix"
Les règles du forum
gangsoleil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2007, 16h13   #7
Rédacteur/Modérateur
 
Avatar de _Mac_
 
Inscription : août 2005
Messages : 8 307
Détails du profil
Informations forums :
Inscription : août 2005
Messages : 8 307
Points : 8 588
Points : 8 588
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.
__________________

Du détail, du détail, du détail !!!
Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute
_Mac_ est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2007, 16h50   #8
Membre éprouvé
 
Homme Marwan Rabbaa
Technophile Web
Inscription : mai 2007
Messages : 930
Détails du profil
Informations personnelles :
Nom : Homme Marwan Rabbaa

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

Informations forums :
Inscription : mai 2007
Messages : 930
Points : 412
Points : 412
Envoyer un message via MSN à sliderman Envoyer un message via Yahoo à sliderman
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
__________________
http://aldorande.miniville.fr/ind
Fedora 8, eclipse 3.3 sur x86_64
--------------
Colorer votre code php
sliderman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2007, 17h53   #9
Membre éprouvé
 
Homme Marwan Rabbaa
Technophile Web
Inscription : mai 2007
Messages : 930
Détails du profil
Informations personnelles :
Nom : Homme Marwan Rabbaa

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

Informations forums :
Inscription : mai 2007
Messages : 930
Points : 412
Points : 412
Envoyer un message via MSN à sliderman Envoyer un message via Yahoo à sliderman
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 :
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)
__________________
http://aldorande.miniville.fr/ind
Fedora 8, eclipse 3.3 sur x86_64
--------------
Colorer votre code php
sliderman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2007, 19h20   #10
Modérateur
 
Avatar de ggnore
 
Inscription : juillet 2004
Messages : 2 246
Détails du profil
Informations personnelles :
Âge : 33

Informations forums :
Inscription : juillet 2004
Messages : 2 246
Points : 1 903
Points : 1 903
Code :
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.
ggnore est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/10/2007, 19h32   #11
Membre éprouvé
 
Homme Marwan Rabbaa
Technophile Web
Inscription : mai 2007
Messages : 930
Détails du profil
Informations personnelles :
Nom : Homme Marwan Rabbaa

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

Informations forums :
Inscription : mai 2007
Messages : 930
Points : 412
Points : 412
Envoyer un message via MSN à sliderman Envoyer un message via Yahoo à sliderman
Citation:
Envoyé par ggnore Voir le message
Code :
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é)
__________________
http://aldorande.miniville.fr/ind
Fedora 8, eclipse 3.3 sur x86_64
--------------
Colorer votre code php
sliderman est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/11/2007, 09h00   #12
Membre confirmé
 
Inscription : octobre 2005
Messages : 344
Détails du profil
Informations forums :
Inscription : octobre 2005
Messages : 344
Points : 270
Points : 270
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 ...
usf70 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h38.


 
 
 
 
Partenaires

Hébergement Web