Brug en lock-fil, der genereres, når den første forekomst af scriptet køres. Det andet script vil undersøge for forekomst af låse filen. Hvis den findes, andet script kunne enten vente (for et bestemt tidsrum), eller man kunne afslutte. Efter det første script er gjort, vil det selvfølgelig rydde op (fjerne) låsen filen.
Jeg havde oprettet en funktion et stykke tid tilbage til at skabe en lås fil baseret på processen antallet af skallen. Funktionen tager to argumenter, en for navnet på den logfil, og den anden er $ $. Scriptet opretter en lock-fil i / tmp bibliotek. Denne fil er indehaver processen ID af råtanken, der skabte den. Hvis du forsøger at køre scriptet, mens et andet eksempel var i gang, denne funktion vil forhindre den anden instans at køre. Fungerer godt for mig. Du er velkommen til at bruge, hvis du ønsker det.
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
}