Есть ли способы помимо передачи списка из find, заставить rsync синхронизировать только файлы, созданные более минуты назад?
Есть синхронизация rsync'ом определенных директорий на двух серверах, на источнике в эту папку периодически пишет ПО, на сервере назначения файлы забирает другое ПО, на сервере источника файлы не сохраняются(по ТЗ так сказать). Собственно столкнулся внезапно с проблемой, из-за того что неправильно мне входные условия дали, оказывается ПО не формирует файл где-то у себя и потом кладет в папку для выгрузки, а сразу пишет туда, в результате rsync хватает файл, в который ещё пишутся изменения, переносит на другой сервер, источник удаляет. Что это дает: битый файл на сервере назначения, падающая задача записи в файл.
Вобщем-то find -mmin решение проблемы, но интересно, есть ли какие-то другие способы это решить? man rsync вроде изучил, не нашлось ничего похожего.
Надо как-то отслеживать появление готовых файлов и подавать их список в rsync, который не должен делать ничего, кроме своей задачи. Так ты сможешь заменять как отслеживающую часть, так и копирующую отдельно друг от друга.
Решал похожую задачу. Самый правильный путь - потребовать создания флагов, указывающих на то, что файл закончил создаваться. Можно внутрь md5 файла писать. А вы на своей стороне будете проверять, существует ли для файла соответствующий файл-флаг и корректная ли у него md5.
Если это невозможно, то правильным способом было бы считывать с некоторой паузой md5 файлов (если файлы небольшие, для больших лучше размер), и если md5 с предыдущего считывания не поменялся, то считать файл готовым к скачиванию и копировать его.
Если вмешиваться в разработку ПО, которое пишет файлы, то самым правильным уже было бы сделать возможность средставами ПО писать результат в удаленные директории. Но такого к сожалению ждать нет возможности, как и добавления каких-либо флагов о завершении.
Мониторинг md5 - хорошая идея, но мне кажется это уже усложнение, получается: первый проход, вычисление md5 всех файлов, второй проход - вычисление md5 всех файлов, для тех, у кого совпадает - те и грузим, плюс md5 для больших файлов, как Вы уже отметили, будет неплохо время жрать. Всё же сделал пока из разряда rsync --files-from=<(find $SRC -type f -mmin +5) src dest, правда ещё вывод find'а пришлось немного sed'ом парсить, ибо иначе белиберда получалась.