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