dlinyj
@dlinyj

Как избежать потерь inotifywait и/или реализовать многопоточную атомарную обработку BASH?

Суть вопроса такова. Есть удалённый сервер, на котором в процессе работы в определённой папке появляются файлы. Есть удалённый сервер, который мониторит появление этих файлов, в случае появления забирает данные, обрабатывает и отдаёт их обратно. Обращаю внимание, что папка даных другая, нежели забираемые файлы. Т.е. просто таким образом передаю только имя данных.

#!/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 и так, чтобы это было атомарно. Может кто-нибудь дать какие-то рекомендации? Спасибо.
  • Вопрос задан
  • 326 просмотров
Пригласить эксперта
Ответы на вопрос 1
а простоподмонтировтаь к файловой системе папку нет? sshfs
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы