r has asked for the wisdom of the Perl Monks concerning the following question:
#!/usr/bin/perl use strict; my $debug = 1; my $serverinst = "/opt/myserver"; my $CLIENTLOG = "$serverinst/logs/errorlog"; my $logfile = "/opt/mon/check.log"; my $pidfile ="/opt/mon/check.pid"; my $errpatt1 = "Internal Error"; my $errpatt2 = "Error 0x0c543 con"; my $polltime = 10; # poll for new file every x seconds open (PIDFILE,">$pidfile") or die "Couldn't open $pidfile: $!\n"; print PIDFILE "$$"; close PIDFILE; open (CL,"$CLIENTLOG") or die "Couldn't open $CLIENTLOG: $!\n"; my $inode = (stat $CLIENTLOG)[1]; ### read to end of file seek (CL, 0, 2); logit(" ### Started $0 with PID $$ ###\n"); LINE: while(1) { logit ("reading") if $debug; while (<CL>) { logit ("read one line"); if (/$errpatt1/ or /$errpatt2/) { wsrestart(); } } if ( -f $CLIENTLOG) { if (get_inode($CLIENTLOG) != $inode) { logit ("inode changed to [$inode]"); unless (open (CL, $CLIENTLOG)) { logit ("ERROR opening $CLIENTLOG: $!"); die "ERROR opening $CLIENTLOG: $!\n"; } $inode = get_inode($CLIENTLOG); next LINE; } } logit ("sleeping") if $debug; sleep ($polltime); seek (CL, 0, 1) } sub logit { my $message = shift; open (LOG, ">>$logfile") or die "Couldn't open $logfile: $!\n"; print LOG localtime(time())."\t$message\n"; close LOG; } sub get_inode { return (stat $_[0])[1]; } sub wsrestart { system("$serverinst/stop"); logit("Server instance $serverinst stopped"); sleep(3); system("$serverinst/start"); logit("Server instance $serverinst started"); }
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
•Re: File tracking
by merlyn (Sage) on Jul 06, 2002 at 15:09 UTC | |
by r (Initiate) on Jul 06, 2002 at 17:35 UTC | |
by ehdonhon (Curate) on Jul 06, 2002 at 18:57 UTC | |
by r (Initiate) on Jul 06, 2002 at 19:35 UTC | |
by Juerd (Abbot) on Jul 06, 2002 at 18:01 UTC | |
|
Re: File tracking
by ehdonhon (Curate) on Jul 06, 2002 at 18:44 UTC |