В этой статье рассмотрим работу Unison с профилями, а также настроим работу Unison как службу SystemD для более удобного управления.
Что такое профиль для Unison
Я уже писал про сервер синхронизации файлов Unison — здесь. Там же я описал установку и примеры использования этого решения.
В этой статье я покажу как можно использовать профили. Вы можете подготовить несколько профилей и запускать синхронизацию то с одним, то с другим профилем. Например, в первом профиле у вас синхронизация идет с одним компьютером, а во втором — с другим. Или в один профиль предназначен для синхронизации одного каталога, а другой для другого каталога. То есть работа с профилями облегчает использование Unison.
Профили позволяют не запоминать разные опции командной строки, а поместить их в файл. Профиль это обычный текстовый файл. А запуск с профилем осуществляется таким образом:
$ unison <имя профиля>
Unison будет искать профиль в домашнем каталоге пользователя, от имени которого он был запущен, в подкаталоге .unison. Файл профиля должен иметь расширение .prf, но в строке запуска это расширение не нужно добавлять. Например запуская $ sudo unison my_sync
, будет искаться профиль /root/.unison/my_sync.prf
.
В этой статье будем использовать для передачи данных TCP-сокет а не SSH. В предыдущей статье я описал разницу работы, так что при желании вы сможете подстроить это под себя.
Использование профилей
Запускаем сервер
Запускаем Unison, в качестве сервера на удалённом компьютере. Опцию -socket
можно использовать только в командной строке, и нельзя в профиле:
$ sudo unison -socket 8080
Создаём профиль клиента и запускаем клиент
На первом компьютере настроим клиентское подключение Unison к серверу с помощью сокета.
Будем использовать опции owner и group, чтобы синхронизировать владельцев файлов. Для этого Unison должен быть запущен от root пользователя.
Создаём профиль для Unison в домашнем каталоге root пользователя, в подкаталоге .unison:
$ sudo nano /root/.unison/my_sync.prf root = /home/alex/testdir root = socket://192.168.0.4:8080//home/alex/testdir silent = true owner = true group = true force = newer times = true confirmbigdel = false log = true logfile = /var/log/unison.log repeat = 5
В профиле мы указали локальный и удалённый каталог для синхронизации. А также следующие опции:
silent = true
— синхронизация будет происходить тихо, без различных оповещений;owner = true
— владелец файлов будет синхронизирован;group = true
— группа владельцев будет синхронизирована;force = newer
— в случае коллизии заменять старые файлы более новыми;times = true
— синхронизировать время файла, это необходимо указать, если используем предыдущую опцию, чтобы Unison знал какой файл новее;confirmbigdel = false
— разрешим полностью очищать каталог, если это не сделать то при удалении всех файлов на одной стороне, синхронизация сломается;log = true
— включим логирование;logfile = /var/log/unison.log
— укажем место для лог-файла;repeat = 5
— повторять синхронизацию каждые 5 секунд.
Запускаем Unison используя профиль:
$ sudo unison my_sync
Важно заметить, если у вас несколько пользователей, то владельцы синхронизируются по именам, а не по uid. Если на одном компьютере есть пользователь alex, то на втором должен быть тоже alex. Если на одном компьютере в этот каталог запишет например alice, а на втором компьютере нет пользователя с этим именем, то этот файл не будет синхронизирован и в логах вы увидите ошибку:
Failed [test.txt]: No user alice
Настройка служб SystemD
Служба на сервере
Настроим службу на сервере Unison. Там мы просто запускаем Unison с опцией -socket 8080:
$ sudo nano /etc/systemd/system/unison.service [Unit] Description=Unison sync my dir After=network.target auditd.service ConditionPathExists=/usr/local/bin/unison [Service] ExecStart=/usr/local/bin/unison -socket 8080 User=root Restart=on-failure Type=exec Nice=19 [Install] WantedBy=multi-user.target
Запустим службу:
$ sudo systemctl daemon-reload $ sudo systemctl start unison.service $ sudo systemctl status unison.service $ sudo systemctl enable unison.service
Служба на клиенте
Настроим службу на клиентском Unison. Здесь уже будем использовать профиль, подготовленный заранее:
$ sudo nano /etc/systemd/system/unison.service [Unit] Description=Unison sync my dir After=network.target auditd.service ConditionPathExists=/root/.unison/my_sync.prf [Service] ExecStart=/usr/local/bin/unison my_sync User=root Restart=on-failure Type=exec Nice=19 [Install] WantedBy=multi-user.target
Затем запустим службу:
$ sudo systemctl daemon-reload $ sudo systemctl start unison.service $ sudo systemctl enable unison.service $ sudo systemctl status unison.service
После запуска обоих служб, если всё правильно сделали, то файлы должны начать синхронизоваться. Добавляем файлы на одной стороне, на другой они появляются. Удаляем на одной стороне, на другой они удаляются.
Надеюсь статья будет вам полезна, оставлю здесь дополнительные ссылки:
Если понравилось статья, подпишись на мой канал в VK.