У меня есть два процесса, которые запускаются в случайное время, и я хочу заставить их никогда не запускаться одновременно из-за проблемы чтения-записи.Я думаю, что когда процесс запускается, я создаю файл LOCK, оба процесса имеют логику проверки, существует ли LOCK.Если LOCK существует, то поспите немного и проснитесь и проверьте его снова.Вот небольшой кусочек этого
if [[ ! -f ${INPUT_DIR}/LOCK ]]
then
#Create LOCK file
cat /dev/null > ${INPUT_DIR}/LOCK
retcode=${?}
if [[ ${retcode} -ne 0 ]]
then
echo `date` "Error in creating LOCK file by processA.sh - Error code: " ${retcode} >> ${CORE_LOG}
exit
fi
echo `date` "LOCK turns on by processA.sh" >> ${CORE_LOG}
...
rm ${INPUT_DIR}/LOCK
fi
Как бы то ни было, это НЕ ОЧЕНЬ останавливает одновременный запуск двух процессов.Редко бывает, когда оба процесса проходят первую проверку IF, если журнал существует (если оба процесса get вызывают одновременно и не существует LOCK, очень вероятно, что он пройдет первый оператор IF), оба пытаются создать файл LOCK, так как cat /dev/null > ${INPUT_DIR}/LOCK
не выдаст ошибку, даже если LOCK уже существует.Есть ли решение для этого?