|
Use a lock file that is generated when the first instance of the script is run. The second script will look for the presence of the lock file. If it exists, the second script could either wait (for a specified period of time) or it could exit. After the first script is done, it would of course clean up (remove) the lock file.
I had created a function awhile back to create a lock file based upon the process number of the shell. The function takes two arguments, one for the name of the log file and the other is $$. The script creates a lock file in the /tmp directory. This file holds the process ID of the shell that created it. If you attempt to execute the script while another instance was running, this function will prevent the second instance from running. Works well for me. Feel free to use if you so choose.
CreateLockFile () {
unset PROCESS_ID
unset ID
LFILE=${TEMP_PATH}/${1}_${TODAYS_DATE}.LCK
ID=$2
if [ -r ${LFILE} ]
then
OPID=`cat ${LFILE}` 2> /dev/null
if [ -z ${OPID} -eq 0 ] #Make Sure OPID contains a value
then
exit ${FAILURE} "ERROR-APP-->: `basename ${LFILE}` exists but contains no Process ID" | tee -a ${INLOG}
else
PROCESS_ID=`ps -p ${OPID} | grep ADD-SCRIPT-NAME-HERE | awk -F" " '{print $1}' 2> /dev/null`
if [ ${PROCESS_ID} ] #Lock File is there, check if process is actually running
then
echo "WARNING-->: ${1} Script Is Currently Running [PID=${OPID}], Exiting. ${DATE_TIME}" | tee -a ${INLOG}
exit ${SUCCESS}
else
echo "INFO-->: Old Lock File with PID= [ ${OPID} ] Exists But Process Is Not Running. " >> ${INLOG}
echo "INFO-->: Overwriting Old PID with New PID Value of [ ${ID} ] " >> ${INLOG}
echo "$ID" > ${LFILE}
fi
fi
else
echo "$ID" > ${LFILE}
if [ $? -ne 0 ]
then
exit ${FAILURE} "ERROR-APP-->: Could Not Create Lock File - Exiting " | tee -a ${INLOG}
fi
fi
}
-->
Code:
CreateLockFile () {
unset PROCESS_ID
unset ID
LFILE=${TEMP_PATH}/${1}_${TODAYS_DATE}.LCK
ID=$2
if [ -r ${LFILE} ]
then
OPID=`cat ${LFILE}` 2> /dev/null
if [ -z ${OPID} -eq 0 ] #Make Sure OPID contains a value
then
exit ${FAILURE} "ERROR-APP-->: `basename ${LFILE}` exists but contains no Process ID" | tee -a ${INLOG}
else
PROCESS_ID=`ps -p ${OPID} | grep ADD-SCRIPT-NAME-HERE | awk -F" " '{print $1}' 2> /dev/null`
if [ ${PROCESS_ID} ] #Lock File is there, check if process is actually running
then
echo "WARNING-->: ${1} Script Is Currently Running [PID=${OPID}], Exiting. ${DATE_TIME}" | tee -a ${INLOG}
exit ${SUCCESS}
else
echo "INFO-->: Old Lock File with PID= [ ${OPID} ] Exists But Process Is Not Running. " >> ${INLOG}
echo "INFO-->: Overwriting Old PID with New PID Value of [ ${ID} ] " >> ${INLOG}
echo "$ID" > ${LFILE}
fi
fi
else
echo "$ID" > ${LFILE}
if [ $? -ne 0 ]
then
exit ${FAILURE} "ERROR-APP-->: Could Not Create Lock File - Exiting " | tee -a ${INLOG}
fi
fi
}
Last edited by google; 04-13-2005 at 11:59 AM..
|