Как выбрать файлы взаимоисключающим способом через автомик?
Мы получаем два разных файла за короткий промежуток времени от мейнфреймов. Мы не можем предсказать последовательность поступления файлов. Эти файлы должны быть выбраны двумя различными рабочими процессами. Но оно должно срабатывать взаимоисключающим образом. Другими словами, если один рабочий процесс выполняется, то другой рабочий процесс должен ждать предыдущего рабочего процесса.
1 ответ
Это может быть достигнуто, чтобы установить некоторый флаг в общем месте. И каждое задание должно иметь доступ к этому местоположению, и если этот флаг установлен, тогда подождите, пока этот флаг не будет установлен.
Исходя из вышеизложенного, я должен создать один файл на сервере Unix в определенном месте, прежде чем выполнять какой-либо один рабочий процесс Любой рабочий процесс видит этот файл в определенном месте, если этот файл существует, и ожидает, пока этот файл не будет удален предыдущим заданием, которое было запущено ранее.
Для создания файла и ожидания удаления файла ниже есть скрипт unix. Который можно определить в первом задании рабочего процесса на вкладке Pre-process.
#!/bin/bash
while true
do
files=$(ls /u/users/lock 2> /dev/null | wc -l)
if [ "$files" != "0" ]
then
echo "Other <workFlow name> is running wait for 10 second"
sleep 10
else
echo "<workFlow name > is not running so <current workflow name> is starting"
touch /u/users/lock
exit 0
fi
done
Для удаления файла в конце рабочего процесса ниже приведен скрипт Unix. Этот скрипт должен быть определен в последнем задании на вкладке процесса.
#!/bin/bash
echo "<current workFlow name> is finshed so releasing the lock"
files=$(ls /u/users/lock 2> /dev/null | wc -l)
if [ "$files" != "0" ]
then
rm /u/users/lock
fi