Gebruik een lock-bestand dat wordt gegenereerd wanneer het eerste exemplaar van het script wordt uitgevoerd. Het tweede script zal kijken naar de aanwezigheid van de lock-bestand. Indien aanwezig, de tweede script kon wachten (voor een bepaalde periode) of kan verlaten. Na de eerste script klaar is, het zou natuurlijk opruimen (verwijder) de lock-bestand.
Ik had een tijdje terug functie voor het maken van een lock-bestand op basis van het proces-nummer van het reservoir. De functie heeft twee argumenten, een voor de naam van het logbestand en de andere is $ $. Het script maakt een lock-bestand in de / tmp directory. Dit bestand bevat de proces-ID van de shell die het heeft aangemaakt. Als u probeert om het script, terwijl een ander geval werd uitgevoerd, deze functie wordt voorkomen dat het tweede exemplaar uit draait. Werkt goed voor mij. Voel je vrij om te gebruiken als je daarvoor kiezen.
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
}