Utilizar um bloqueio arquivo que é gerado quando a primeira instância do script é executado. O segundo script vai olhar para a presença de bloqueio do arquivo. Se existir, o segundo script poderia esperar (para um determinado período de tempo) ou ele poderia sair. Após o primeiro script é feito, teria naturalmente limpar (remover) o bloqueio arquivo.
Eu tinha criado algum tempo atrás uma função para criar um arquivo baseado em bloquear o processo número do reservatório. A função tem dois argumentos, um para o nome do arquivo de log e as outras é $ $. O script cria um bloqueio arquivo na directoria / tmp. Este arquivo possui o ID do processo do shell que ele criou. Se você tentar executar o script enquanto outro caso, foi a correr, esta função irá impedir o funcionamento de segunda instância. Funciona bem para mim. Sinta-se livre para usar, se assim o desejarem.
Código:
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
}