В этой статье рассмотрим работу Unison с профилями, а также настроим работу Unison как службу SystemD для более удобного управления.

Что такое профиль для Unison

Я уже писал про сервер синхронизации файлов Unison здесь. Там же я описал установку и примеры использования этого решения.

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

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

$ unison <имя профиля>

Unison будет искать профиль в домашнем каталоге пользователя, от имени которого он был запущен, в подкаталоге .unison. Файл профиля должен иметь расширение .prf, но в строке запуска это расширение не нужно добавлять. Например запуская $ sudo unison my_sync, будет искаться профиль /root/.unison/my_sync.prf.

В этой статье будем использовать для передачи данных TCP-сокет а не SSH. В предыдущей статье я описал разницу работы, так что при желании вы сможете подстроить это под себя.

Использование профилей

Unison синхронизация с профилями

Запускаем сервер

Запускаем 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

После запуска обоих служб, если всё правильно сделали, то файлы должны начать синхронизоваться. Добавляем файлы на одной стороне, на другой они появляются. Удаляем на одной стороне, на другой они удаляются.


Надеюсь статья будет вам полезна, оставлю здесь дополнительные ссылки:

  • Официальная инструкцию по Unison — здесь.
  • Другие мои статьи по Unison — здесь.

Если понравилось статья, подпишись на мой канал в VK.

Сводка
Unison - работа с профилями и службами SystemD
Имя статьи
Unison - работа с профилями и службами SystemD
Описание
В этой статье рассмотрим работу Unison с профилями, а также настроим работу Unison как службу SystemD для более удобного управления

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *