The UNIX and Linux Forums  
Hello and Welcome from United States to the UNIX and Linux Forums! Thank You for Visiting and Joining Our Global Community.

Go Back   The UNIX and Linux Forums > Top Forums > Shell Programming and Scripting
.
google unix.com




View Single Post in the UNIX and Linux Forums - Click on the Thread or Permalink to View Entire Thread -->
  #2 (permalink)  
Old 04-13-2005
google's Avatar
google google is offline Forum Advisor  
Moderator
  
 

Join Date: Jul 2002
Location: Atlanta
Posts: 740
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.


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..