Je me demande si cela est possible, et si oui comment, on pourrait créer un script Perl qui surveille en permanence un fichier / dB, puis appelez un sous-programme pour effectuer le traitement du texte si le fichier est modifié. Je suis à peu près sûr que ce serait possible avec des sockets, mais cela doit être utilisé pour une application Webchat sur un site en cours d'exécution sur un hôte partagé, et je ne suis pas si sûr que les prises seraient autorisées à ce sujet. p>
L'idée de base est: p>
Merci d'avance. P>
3 Réponses :
De nombreux systèmes d'exploitation exécutent un service permettant aux applications d'enregistrer une demande à notifier lorsqu'un fichier ou un chemin a été mis à jour. Ceci est généralement appelé Moniteur de modification de fichier . Voir la page Wikipedia liée pour certains systèmes disponibles. Les systèmes de linux récents utilisent Inotify, précédemment dnotify ou gamin ont été utilisés. OS X utilise des fsevents. Windows a un système similaire. Je ne connais aucun module ou mécanisme qui fonctionne dans la plate-forme croix pour tous ces systèmes, mais il existe des modules spécifiques disponibles sur CPAN, tels que SGI :: fam et Fichier :: Tail :: Fam . P>
Hmm, fichier :: queue :: fam semble être ce que je cherche, j'y regarde. Merci.
Fichier :: Changenotify espère être une plate-forme multi-plate-forme à usage général l'un de ces , mais à ce moment-là, il n'a que des annexes pour Inotify, BSD KQuues et une méthode de sondage de secours ( Stat code> Tous les fichiers et les DIRS périodiquement). Non Win32, pas de fam. :(
Je ferais cela avec un travail cron et un maquillage qui a invoqué un script Perl. La chose pratique est que vous obtenez automatiquement le script perl comme l'horodatage à comparer contre, car le script attime est mis à jour lorsqu'il est invoqué. P>
Cela semble promu, mais hélas, le site est sur un hôte partagé.
use POE qw(Wheel::FollowTail); POE::Session->create( inline_states => { _start => sub { $_[HEAP]{tailor} = POE::Wheel::FollowTail->new( Filename => "/var/log/thttpd.log", InputEvent => "got_log_line", ResetEvent => "got_log_rollover", ); }, got_log_line => sub { #print "Log: $_[ARG0]\n"; parseline($_[ARG0]); }, got_log_rollover => sub { #print "Log rolled over.\n"; }, } ); POE::Kernel->run(); exit; #parseline()...etc.
Il suffit de vous demander, ce module est-il inclus dans un Instal de perl standard, ou est-ce de CPAN?
Cela n'a pas de bruit si difficile, sondez simplement le fichier toutes les quelques secondes avec
-m code>.
Seule chose est, interrogez le fichier toutes les quelques secondes pourraient surcharger le serveur / la bande passante. Cependant, s'il existe une méthode pour simplement surveiller son horodatage, cela ne prendrait pas trop de ressources, je devrais penser.