Синхронизация файлов между сайтами с помощью Rsync

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

Для этих целей есть unix утилита Rsync, которая позволяет быстро выполнить синхронизацию новых файлов в различных директориях.

1

Как правило утилита уже установлена на множестве хостингах и запускается в консоле через SSH. Команды выполняется по следующему синтаксису:

rsync -опции исходная_директория/ директория_назначения

В конце исходной директории стоит слеш, чтобы обрабатывалась сама директория и всё её содержимое.

Основные опции

-v Выводить подробную информацию.
-progress Выводить прогресс передачи файла.
-q Не выводить информацию.
-c Проверка контрольных сумм для файлов.
-a Режим архивирования.
-R Используются относительные пути.
-b Создание резервной копии.
-u Не перезаписывать более новые файлы.
-l Копировать символьные ссылки.
-L Копировать содержимое ссылок.
-H Копировать жесткие ссылки.
-p Сохранять права для файлов.
-g Сохранять группу.
-t Сохранять время модификации.
-e Использовать другой порт для ssh.
-z Сжимать файлы перед передачей.
-delete Удалять файлы которых нет в источнике.
-exclude Исключение файлов по шаблону.
-r
-recursive
Обрабатывать директории рекурсивно.
-n
-dry-run
Тестовый прогон без синхронизации.

Полное описание опций на https://download.samba.org/pub/rsync/rsync.1 (en).

2

Если два сайта находятся на одном хостинге, задача упрощается т.к. файлы обеих сайтов находятся в одном дисковом пространстве. Остается только узнать полные пути до директорий и выполнить копирование новых файлов из /home/example.ru/uploads в /home/example.com/uploads

rsync -auq /home/example.ru/uploads/ /home/example.com/uploads

Синхронизация в обе стороны выполняется двумя командами:

rsync -auq /home/example.ru/uploads/ /home/example.com/uploads
rsync -auq /home/example.com/uploads/ /home/example.ru/uploads

При повторном выполнении команд утилита будет обновлять файлы только с изменениями, но не удаляя их.

3

Для синхронизации файлов на разных хостингах, rsync должен быть установлен на обоих серверах, в команде указывается логин и адрес хоста:

rsync -опции /исходная_директория/ имя_пользователя@адрес:директория_назначения

После запуска команды потребуется ввести пароль в консоль.

Пример:

rsync -azvuq /home/example.ru/uploads/ user@host:/home/example.com/uploads

Синхронизация в обе стороны:

rsync -azvuq /home/example.ru/uploads/ user@host:/home/example.com/uploads
rsync -azvuq user@host:/home/example.com/uploads/ /home/example.ru/uploads
4

Чтобы автоматизировать процесс синхронизации, можно сгруппировать все команды rsync в файле sync.sh и поместить его в корневой директории хостинга и запускать его по крону раз в три часа.

# Минута   Час        День       Месяц      День недели  Команда
0          */3        *          *          *            /sync.sh

При работе с удалёнными хостами по SSH потребуется настроить авторизацию по ключу.

07.04.2021, обновлено 13.12.2022
5465

Комментарии

, чтобы добавить комментарий.

Другие публикации

Работа с архивами через SSH
Список команд для утилит GZIP, TAR, ZIP, RAR для архивирования и распаковки файлов через SSH.
17243
0
Примеры использования PuTTY
PuTTY – популярный SSH клиент под Windows, легкий и не требует установки. Скачать программу можно на официальном сайте.
11326
+5
Загрузка файлов на сервер PHP
В статье приведен пример формы и php-скрипта для безопасной загрузки файлов на сервер, возможные ошибки и рекомендации при работе с данной темой.
72209
+22
Массив $_SERVER
Описание значений глобального массива $_SERVER с примерами.
52536
+3
Contenteditable – текстовый редактор
Если добавить атрибут contenteditable к элементу, его содержимое становится доступно для редактирования пользователю, а...
43706
+34
Использование API Яндекс Диска на PHP
Можно найти множество применений Яндекс Диска на своем сайте, например, хранение бекапов и отчетов, обновление прайсов,...
55973
+20