How do I get my script to monitor a new file using tail?

Hi,

I have a script which basically watches a log file for new lines using tail, then takes action based on what is logged. I wrote a script to do this for me and its working great, my only problem is that once per week, this log file is archived to another directory, and a new log is created. I need to monitor the NEW log file, but even though the old one is moved, my tail which is always running (tail -f | while) still seems to be looking at the OLD file. How can I get my script to work and start reading the NEW log file each week? The only way I can think of to do this is to have another script which runs every week that kills my script and re-starts it...

Here is the specific line in my script where it stops and sits forever when the log file is archived (ASAI.log) and a new one is created:
tail -n1 -f /home/dirTalk/current_dir/oamlog/ASAI.log | while read output_line

Here is the entire script:

#!/usr/bin/ksh
#############################################################################
# Created by Jeff Civitano on 5/27/2009 for Armonk
#############################################################################
CheckforLock()
{
    # See if an instance of setmwiq_remove is already running by looking for setmwiq_remove_lockfile
    cat /home/dtuser/bin/setmwiq_remove_lockfile > /dev/null 2>&1
    if (test $? -eq 0) then
        #setmwiq_remove already running
        return 1
    fi
    if (test $? -ne 0) then
        #setmwiq_remove not running
        return 0
    fi
}
CreateLock()
{
    # Create setmwiq_remove_lockfile
    touch /home/dtuser/bin/setmwiq_remove_lockfile
    echo "setmwiq_remove created setmwiq_remove_lockfile " >> /home/dirTalk/current_dir/oamlog/setmwiq_remove.log
}
DeleteLock()
{
    # Delete setmwiq_remove_lockfile
    rm /home/dtuser/bin/setmwiq_remove_lockfile
    echo "setmwiq_remove deleted setmwiq_remove_lockfile" >> /home/dirTalk/current_dir/oamlog/setmwiq_remove.log
}
# MAIN
# Is the script already running?
CheckforLock  #Invoke the function
CheckforLockrc=$?
if (test $CheckforLockrc -eq 1) then
    exit 0
fi
# script is not running, create lock
CreateLock
date >> /home/dirTalk/current_dir/oamlog/setmwiq_remove.log
db2 "connect to dtdbv220" >> /home/dirTalk/current_dir/oamlog/setmwiq_remove.log
last_profile=0
switch=3
# Get latest profile number from ASAI.log to Remove from setmwiq
tail -n1 -f /home/dirTalk/current_dir/oamlog/ASAI.log | while read output_line 
do
echo $output_line | grep "confirmed for" > /home/dtuser/bin/profile_file
wc -l /home/dtuser/bin/profile_file | awk '{print $1}' | read count
if ((count>0)) then
    cat /home/dtuser/bin/profile_file | awk '{print $8}' | read profile
    cat /home/dtuser/bin/profile_file | awk '{print $5}' | read OnOrOff
    rc=`echo $profile | grep $last_profile | wc -l | awk '{print $1}'`
    if (test $rc -eq 0) then
      if [[ $OnOrOff = "on" ]]; then
        switch=1
      fi
      if [[ $OnOrOff = "off" ]]; then
        switch=0
      fi
      echo "MWI confirmed for [$profile], remove from setmwiq table:" >> /home/dirTalk/current_dir/oamlog/setmwiq_remove.log
      echo "db2 delete from setmwiq where user_id='$profile' and switch=$switch" >> /home/dirTalk/current_dir/oamlog/setmwiq_remove.log
      db2 "delete from setmwiq where user_id='$profile' and switch=$switch" >> /home/dirTalk/current_dir/oamlog/setmwiq_remove.log
      last_profile=$profile
    fi
fi
done
date >> /home/dirTalk/current_dir/oamlog/setmwiq_remove.log
db2 "quit" >> /home/dirTalk/current_dir/oamlog/setmwiq_remove.log
rm /home/dtuser/bin/profile_file
# script finished, delete lock
DeleteLock

To keep the forums high quality for all users, please take the time to format your posts correctly.

First of all, use Code Tags when you post any code or data samples so others can easily read your code. You can easily do this by highlighting your code and then clicking on the # in the editing menu. (You can also type code tags

```text
 and 
```

by hand.)

Second, avoid adding color or different fonts and font size to your posts. Selective use of color to highlight a single word or phrase can be useful at times, but using color, in general, makes the forums harder to read, especially bright colors like red.

Third, be careful when you cut-and-paste, edit any odd characters and make sure all links are working property.

Thank You.

The UNIX and Linux Forums

Disclaimer: I use bash, not ksh

use -F or --retry. So:

tail -n1 -f --retry /home/dirTalk/current_dir/oamlog/ASAI.log | while read output_line

 or

tail -n1 -F /home/dirTalk/current_dir/oamlog/ASAI.log | while read output_line

MG

-F or --retry doesn't seem to work on my system (AIX 5.3):
$>tail -n1 -F IMC_Stats.log
Usage: tail [-f] [-c Number|-n Number|-m Number|-b Number|-k Number] [File]
Usage: tail [-r] [-n Number] [File]
Usage: tail [+|-[Number]][l|b|c|k|m][f] [File]

$>tail -n1 --retry IMC_Stats.log
Usage: tail [-f] [-c Number|-n Number|-m Number|-b Number|-k Number] [File]
Usage: tail [-r] [-n Number] [File]
Usage: tail [+|-[Number]][l|b|c|k|m][f] [File]

Any other ideas are appreciated...

If you delete the log file you also break the file handle linked with the tail command. Instead of delete the file empty it after archiving with:

cp /dev/null /home/dirTalk/current_dir/oamlog/ASAI.log

Regards