Fellow monks, I wrote a small inefficient perl script that checks to see if the time has changed on the /var/log/httpd/access_log file. If the file time is the same it prints a period. Once the file is "touch"ed by anything and the time changes, the script prints an "x". Eventually, I want to move to a specific response instead of an "x". The file uses 12% of cpu process because of its while loop nature. Is there a better way to do this?
#!/usr/bin/perl
print "Testing to see if file changes.\n";
$listing = `ls -al access_log`;
@fields = split /" "/,$listing;
foreach (@fields) {
if (/[0-9][0-9]:[0-9][0-9]/) {
$status = $&;
print "Status is :",$status,"\n"; }
else {
print "Didn't find anything.\n";
}
}
@fields = split /:/, $status;
$hours = @fields[0];
$minutes = @fields[1];
print "hours :",$hours,"\n";
print "minutes :",$minutes,"\n";
$hours2 = $hours;
$minutes2 = $minutes;
@fields = ();
while (1) {
while ($hours == $hours2 && $minutes == $minutes2) {
$listing = `ls -al access_log`;
@fields = split /" "/,$listing;
foreach (@fields) {
if (/[0-9][0-9]:[0-9][0-9]/) {
$status = $&;
}
else {
# print "Didn't find anything suckker.\n";
}
}
@fields = split/:/,$status;
$hours = @fields[0];
$minutes=@fields[1];
@fields= ();
print "."; # meaning the time is the still the same
}
$hours2 = $hours;
$minutes2 = $minutes;
print "x"; # meaning the time has changed; file touched
}