Для решения задачи по синхронизации данных между двумя машинами, в ситуации когда изменения могут появиться на каждом из компьютеров, прекрасно подходит утилита unison (http://www.cis.upenn.edu/~bcpierce/unison/). При синхронизации между удаленными машинами в качестве транспорта может использоваться ssh. При обнаружении конфликтов, например, когда на обоих машинах отредактирован один и тот же файл, unison пытается разрешить конфликт автоматически, а если это не удается предоставляет пользователю интерфейс для принятия решения.Устанавливаем unison.
Fedora/RHEL/CentOS:
sudo yum install unison
Debian/Ubuntu:
sudo apt-get install unisonFreeBSD:
# cd /usr/ports/net/unison/ && make installСинхронизируем две локальные директории:
unison /test1 /test2
В процессе будет выводиться статистика и задаваться вопросы, касающаяся синхронизации и разрешения конфликтов, направление копирования будет указано стрелкой.
Для синхронизации с удаленной директорией необходимо указать:
unison /test1 ssh://testserver.test.ru//test1
Чтобы выполнить синхронизацию автоматически, без интерактивного взаимодействия с пользователем необходимо использовать опцию "-batch". В случае конфликта, выполнение будет прервано с выводом соответствующего уведомления.
Для определения сложной политики синхронизации можно создать файл конфигурации с определением параметров.
Например, создаем файл ~/.unison/test.prf:
# Определяем список директорий, которые будут синхронизированы
root = /home/project
root = /mnt/NFS/home/project# Указываем сохранять права доступа и владельца
owner = true
times = true# Определяем список поддиректорий, которые нужно синхронизировать, остальное игнорируем:
path = cgi-bin
path = htdocs
path = conf# Определяем маски для файлов, которые не нужно синхронизировать
ignore = Name .htaccess
ignore = Name *~
ignore = Name .*~
ignore = Path conf/project.conf
ignore = Path htdocs/rrd
ignore = Path htdocs/mon
ignore = Name *.o
ignore = Name *.tmp
ignore = Name *.log
ignore = Name *.gz
ignore = Name *.iso
ignore = Name {,.}*{.old}# Копируем в резервные копии изменяемых файлов в отдельную директорию
backup = Name *
backups = true
backupdir = /home/project/backup# Определяем свою команду для отображения отличий между копиями файлов при конфликте
#diff = diff -y -W 79 --suppress-common-lines# Сохраняем лог с результатами работы в отдельном файле
log = true
logfile = ./sync.log
При необходимости синхронизировать описанные в файле конфигурации директории, выполняем:unison test
URL:
Обсуждается: https://www.opennet.ru/tips/info/2422.shtml
Было бы интереснее если была раскрыта тема двустронней синхронизации между Windows и Unix серверами.
>Было бы интереснее если была раскрыта тема двустронней синхронизации между Windows и
>Unix серверами.Вы не поверите, но unison прекрасно работает и под Windows, без разницы где его запускать и инструкции те же самые.
Синхронизации чего? Что можно между операционками синхронизировать? Настройки, шрифты? :)Наверняка вопрос про синк между программами под разными ОС - тогда проблему и название программы бы знать...
Ок, хочу синхронизировать CF-карту с FAT32 и директорию ~/boooks
Выставите флаг не сохранять аттрибуты и синхронизируйте.
ftp есть? а если только в одну сторону делать зеркало? под винду тоже консоль? демоны с обоих сторон надро запускать? или достаточно с одной?:)
Я так понимаю что когда надо синхронизовать - тогда надо запускать эту утилитку. А как синхронизировать два каталога (с подкаталогами), чтоб после копирования и/или редактирования файла в каталог (или подкаталог) автоматически запускалась синхронизация? Думаю такой эфект можна получить используя watch -n 0,1 unison /test1 ssh://testserver.test.ru//test1, но это както муторно
http://ru.wikipedia.org/wiki/Inotify + демон,слушающий его и запускающий то, что тебе нужно
% apt-cache search incron
incron - cron-like daemon which handles filesystem events
Интересно, посмотрим... А я делаю так - в ~/sync лежат все настройки, дотфайлы и директории для синхронизации. Вместо конфигов симлинки в ~/sync. Сам ~/sync под гитом. Если на обоих машинах произошли изменения, то гит поможет смержить обе версии. Ну и скрипты ~/sync/scripts/ для слияния в одну команду (сам ищет на что надо натравить git rm и пр.).