2010-11-30 28 views
1

Je suis en train de surveiller un fichier journal avec tail -f, l'analyser pour en extraire des données avec grep et passer le données sous forme de requête mysql. je pourrais le faire en passant chaque nouvelle ligne détectée par tailf à un script php, mais je ne sais pas comment faire .. ou je pourrais simuler tailf avec php directement, mais comment je suivre un fichier de changements avec php? Je pense juste en ayant un certain temps, regardez la taille, rappelez-vous la dernière position, chercher et lire jusqu'à ce que la différence à droite? Quelqu'un peut donner quelques conseils sur ce qui est préférable d'utiliser? ou plus simple? Aussi j'ai entendu les pipes nommés pourraient être une solution, mais ne savent pas comment saisir les données à partir de là L'enregistreur est nginx par la voie .. mercicomment exécuter une requête mysql chaque queue de temps -f montre une nouvelle ligne à partir d'un fichier journal dans linux

Répondre

0

vous mixez à des approches différentes. tail -f signifie que vous aurez un processus en cours d'exécution tout le temps et si le fichier journal est tronqué (pivoté), vous serez probablement bloqué. Si vous avez besoin d'une bonne chose pour la surveillance du journal (je suppose linux) alors vous devez surveiller le fichier pour les changements et chercher à la position mémorisée. La meilleure façon IMHO est de s'appuyer sur une solution existante. syslog-ng semble venir à l'esprit. Il peut canaliser vos fichiers journaux dans votre programme. Bien que ce ne soit pas le cas avec les journaux non sysloged. Le j'opterais pour http://www.php.net/manual/en/intro.inotify.php. Cela nécessitera un processus en cours d'exécution. Comme la solution finale (l'ordre dépend de votre situation), j'irais faire une vérification périodique avec cron.

+0

Ce que j'ai expérimenté avec PHP, c'est qu'il tend à bloquer le fichier quand il le lit (bien sûr, je vais ouvrir juste pour lire non bloquant) – PartySoft

+0

J'espère que vous ne prévoyez pas de coder quelque chose qui bloquera. Si vous envisagez d'utiliser une telle approche pour une application qui doit gérer la concurrence d'accès où vous pouvez obtenir des dizaines, voire des centaines de processus bloqués dans IO, attendez de lire un fichier .... vous feriez mieux de réfléchir à ce que vous faites:) –