посоветуйте инструмент (синхронизация нескольких папок)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модераторы: SLEDopit, Модераторы разделов

vsdfn
Сообщения: 147
ОС: Windows,Linux,BSD

посоветуйте инструмент

Сообщение vsdfn »

Есть три разных директории(/home/22 /home/33 /home/44 и тд). В этих директориях 24/7 будет падать разный хлам и текстовые файлы в подпапках и в корне этих директорий. Основная цель: найти все txt файлы рекурсивно и скопировать их на шару, допустим /home/some_dir. Каждый тхт - имеет уникальное имя. Нужно сделать так, чтобы проверялось есть ли такой файл в /home/some_dir или нет(чтобы снять лишнюю нагрузку). rsync сможет сделать это или нет ? И вообще с помощью чего лучше решить все это ?

И забыл добавить: все тхт в директориях попадают туда не в готовом виде. Тхт появляются, в них скидывается информация. Т.е если синкать по крону получится так, что синкнулась тхт в которой недописанный результат.
Спасибо сказали:
Аватара пользователя
SLEDopit
Модератор
Сообщения: 4824
Статус: фанат консоли (=
ОС: GNU/Debian, RHEL

Re: посоветуйте инструмент

Сообщение SLEDopit »

vsdfn писал(а):
13.12.2012 22:16
rsync сможет сделать это или нет ? И вообще с помощью чего лучше решить все это ?
может, с помощью него и лучше.
vsdfn писал(а):
13.12.2012 22:16
Т.е если синкать по крону получится так, что синкнулась тхт в которой недописанный результат.
можно после завершения всех операция с txt выставлять некий флаг (пустой файл) в директории, сигнализирующий, что директория готова к синхронизации. а крон, прежде чем запустить синхронизацию конкретной директории, будет проверять наличие этого флага.
UNIX is basically a simple operating system, but you have to be a genius to understand the simplicity. © Dennis Ritchie
The more you believe you don't do mistakes, the more bugs are in your code.
Спасибо сказали:
vsdfn
Сообщения: 147
ОС: Windows,Linux,BSD

Re: посоветуйте инструмент

Сообщение vsdfn »

SLEDopit писал(а):
13.12.2012 22:35
vsdfn писал(а):
13.12.2012 22:16
rsync сможет сделать это или нет ? И вообще с помощью чего лучше решить все это ?
может, с помощью него и лучше.
vsdfn писал(а):
13.12.2012 22:16
Т.е если синкать по крону получится так, что синкнулась тхт в которой недописанный результат.
можно после завершения всех операция с txt выставлять некий флаг (пустой файл) в директории, сигнализирующий, что директория готова к синхронизации. а крон, прежде чем запустить синхронизацию конкретной директории, будет проверять наличие этого флага.

c флагом готовности директории не пойдет. Нет там особого состояния в директории. Только хардкор, только риалтайм наполнение тхт в перемешку со всем Г
Спасибо сказали:
liaonau
Сообщения: 390
ОС: gentoo

Re: посоветуйте инструмент

Сообщение liaonau »

Тогда, например, синхронизируйте после каждого изменения текстовых файлов. Об этом изменении узнавайте от ядра с помощью inotify на директорию, в которой файл находится.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21520
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: посоветуйте инструмент

Сообщение Bizdelnick »

vsdfn писал(а):
13.12.2012 22:16
если синкать по крону получится так, что синкнулась тхт в которой недописанный результат.

В следующий раз синкнется окончательный.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
liaonau
Сообщения: 390
ОС: gentoo

Re: посоветуйте инструмент

Сообщение liaonau »

Bizdelnick писал(а):
13.12.2012 23:27
В следующий раз синкнется окончательный.

Я может быть неправильно понял, что там нет никакого окончательного результата — логи, например.
Спасибо сказали:
pelmen
Сообщения: 1268
ОС: debian

Re: посоветуйте инструмент

Сообщение pelmen »

Возможно, метод работы "maildir:" что-то навеет? файл сначала попадает в ~/Maildir/tmp/, затем, когда он окончательно записался, тогда делается жесткая ссылка в ~/Maildir/new/, а исходный файл удаляется. Вот если можно как-то (inotify?) определить, что файл записался окончательно, то делать жесткую ссылку на файл в соседний каталог (например, /home/22_txt/), а уже этот каталог синхронизировать rsync-ом с /home/some_dir
vsdfn писал(а):
13.12.2012 22:16
И забыл добавить: все тхт в директориях попадают туда не в готовом виде. Тхт появляются, в них скидывается информация. Т.е если синкать по крону получится так, что синкнулась тхт в которой недописанный результат.

Пользователем создается пустой текстовый файл, потом этот или другой пользователь записывают в него данные? Если да, то как вы сами определяете, закончили писать в файл данные, или нет? Может там еще 2-3 раза дозапишут что-то?
Спасибо сказали:
Аватара пользователя
Goodvin
Ведущий рубрики
Сообщения: 4333
Статус: ⚝⚠⚒⚑⚖☭☞☣☤&

Re: посоветуйте инструмент

Сообщение Goodvin »

vsdfn писал(а):
13.12.2012 22:16
Есть три разных директории(/home/22 /home/33 /home/44 и тд). В этих директориях 24/7 будет падать разный хлам и текстовые файлы в подпапках и в корне этих директорий. Основная цель: найти все txt файлы рекурсивно и скопировать их на шару, допустим /home/some_dir. Каждый тхт - имеет уникальное имя. Нужно сделать так, чтобы проверялось есть ли такой файл в /home/some_dir или нет(чтобы снять лишнюю нагрузку). rsync сможет сделать это или нет ? И вообще с помощью чего лучше решить все это ?

И забыл добавить: все тхт в директориях попадают туда не в готовом виде. Тхт появляются, в них скидывается информация. Т.е если синкать по крону получится так, что синкнулась тхт в которой недописанный результат.

А в результирующем каталоге /home/some_dir все txt-файлы должны быть в одной куче?

Если это необязательно, то может быть сильно проще сделать внутри /home/some_dir симлинки на каталоги (/home/22 /home/33 /home/44 и тд).
А если обязательно - то посмотреть в сторону обьединения содержимого этих каталогов (/home/22 /home/33 /home/44 и тд) в одну кучу чем-то вроде AuFS.
И уже на эту результирую "кучу" сделать симлинк внутри целевого каталога /home/some_dir

В этом случае не надо никаких синхронизаций, все будет видно сразу в реалтайме.

Спасибо сказали:
BigBrother
Сообщения: 436
Статус: ¯\_(ツ)_/¯
ОС: linux based

Re: посоветуйте инструмент

Сообщение BigBrother »

vsdfn писал(а):
13.12.2012 22:16
И забыл добавить: все тхт в директориях попадают туда не в готовом виде. Тхт появляются, в них скидывается информация. Т.е если синкать по крону получится так, что синкнулась тхт в которой недописанный результат.

а при следующей синхронизации уже будет с информацией, т.к. файл был изменен (rsync это умеет).

ВНИМАНИЕ!!! БУДЬТЕ ОСТОРОЖНЫ С ПЕРЕДАВАЕМЫМИ ПАРАМЕТРАМИ ПРИ ИСПОЛЬЗОВАНИИ ОПЦИИ --delete.
ЕСЛИ СДЕЛАТЬ ТАК (добавлен слэш вконце пути server_IP)

Код: Выделить всё

rsync -e "ssh -p888" -avz --delete root@server_IP:/usr/local/nginx/ /usr/local

ТО ВСЕ СОДЕРЖИМОЕ /usr/local УДАЛИТСЯ, И ЗАМЕНИТСЯ СОДЕРЖИМЫМ root@server_IP:/usr/local/nginx
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: посоветуйте инструмент

Сообщение drBatty »

vsdfn писал(а):
13.12.2012 22:16
Есть три разных директории(/home/22 /home/33 /home/44 и тд). В этих директориях 24/7 будет падать разный хлам и текстовые файлы в подпапках и в корне этих директорий. Основная цель: найти все txt файлы рекурсивно и скопировать их на шару,

find что-бы найти. Для копирования надо перейти в каталог /home/, найти (скажем ./44/x/y/z/xxx.txt), и скопировать с ключом --parents. (man cp)
vsdfn писал(а):
13.12.2012 22:16
Нужно сделать так, чтобы проверялось есть ли такой файл в /home/some_dir или нет(чтобы снять лишнюю нагрузку).

cp --no-clobber
vsdfn писал(а):
13.12.2012 22:16
rsync сможет сделать это или нет ?

может. Уж если тупая cp может...

vsdfn писал(а):
13.12.2012 22:16
И забыл добавить: все тхт в директориях попадают туда не в готовом виде. Тхт появляются, в них скидывается информация. Т.е если синкать по крону получится так, что синкнулась тхт в которой недописанный результат.

обычно файл на запись не открывается. Вместо этого записывается временный файл, который атомарно подменяет текущий (часто при этом также атомарно текущей переименовывается например в *~). Потому в Linux таких проблем нет.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали: