Hi Bros,
I am in a serious trouble with concurrency issue while using mailx. I have a shell script which reads all the emails of a unix user account and create a copy (another mbox for processing and archive purpose). This script works fine for 99.99% of the time but sometime it start creating multiple copies of the same email during creation of another temp mail box copy and subsequently results in large repetitive insert database calls.
This email loading shell script is a regular cron job which runs after every 30 minutes. My doubts goes to somebody running mailx command or reading email of the same user account while Email Loader is running. Am i correct with my doubt ? Is there anyways to explicit lock the unix user mailbox while my Email Loader program is running ? please advise if i am wring somewhere in script.
I am also providing code snippet here -
# Functions for checking whether there is any emails in user mailbox - returns 0 in variable mailstat if there are new emails in mailbox otherwise 1.
Code:
check_mailbox()
{
if [ "$mailfile" = "" ]; then
mailx -e
else
#mailx -e -f $mailfile
if [ -f "$mailfile" ]; then
mailstat=0
else
mailstat=1
fi
fi
mailstat=$?
} # check_mailbox
#### main Block which is running and creating a copy of all mails in users mailbox.
------------
/* mail file is always blank as we never pass any argument to script.*/
mailfile="$1"
echo "Test to see if there is mail. Exit status will be 0 if there is." >> $logfile
check_mailbox
if [ $mailstat -eq 1 ]; then
echo "No mails exist in mailbox" >> $logfile
exit 1
fi
echo "Archiving Mailbox." >> $logfile
touch ${mailboxarchive}
while ( [ $mailstat -eq 0 ] )
do
echo "save ${mailboxarchive}
quit" > $exmailfl
if [ "empty$mailfile" = "empty" ]; then
mailx < $exmailfl > $outfile
else
if [ ! -f $mailfile ]; then
# all done
break
fi
mailx -f $mailfile < $exmailfl > $outfile
fi
check_mailbox
done