Суть вопроса такова. Есть удалённый сервер, на котором в процессе работы в определённой папке появляются файлы. Есть удалённый сервер, который мониторит появление этих файлов, в случае появления забирает данные, обрабатывает и отдаёт их обратно. Обращаю внимание, что папка даных другая, нежели забираемые файлы. Т.е. просто таким образом передаю только имя данных.
#!/bin/bash
ssh user@host inotifywait -e create /any_path1/ --format "%f" -q -m| while read file; do
scp user@host:/any_path2/$file* ./
....
#некоторая обработка длительностью 5-20 секунд
...
scp $file.res user@host:/any_path2/$/result/
done
Следует отметить, что обработка весьма продолжительна. И одна может выполнятся только в один поток (т.е. используются аппаратные ресурсы, которые параллелить не получается).
Всё это чудесно работает, если единовременно у нас появляется одновременно не более 3-4 файлов. Потом начинают файлы теряться.
Вопрос в том, как решить проблему потерь файлов?
Один из вариантов решений, которые я вижу - это использовать многопоточный запуск обработчика. Но тут натыкаюсь на другую проблему: необходимо лочить каждый поток, пока не отработает предыдущий. И вот тут сколько я не искал, не знаю как это сделать на bash и так, чтобы это было атомарно. Может кто-нибудь дать какие-то рекомендации? Спасибо.