Bruk en lås som genereres når den første forekomsten av skriptet er kjørt. Det andre skriptet etter tilstedeværelse av lock filen. Hvis den finnes, den andre skriptet kan enten vente (for et gitt tidsrom) eller det kan avslutte. Etter den første skriptet er gjort, ville det selvsagt rydde opp (fjern) låsen fil.
Jeg hadde laget en funksjon stund tilbake for å lage en lock fil basert på prosessen antall skallet. Funksjonen tar to argumenter, en på navnet til loggfilen og den andre er $ $. Skriptet lager en lock fil i / tmp-katalogen. Denne filen inneholder prosessen ID skallet som skapte den. Hvis du prøver å kjøre skriptet mens en annen forekomst ble publisert, vil denne funksjonen hindrer andre forekomsten kjører. Fungerer bra for meg. Bruk gjerne 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
}