You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

6.3 KiB

dsync - Утилита для синхронизации директорий

dsync - это инструмент командной строки для синхронизации локальных проектов с удаленными серверами через SSH и rsync. Позволяет легко управлять синхронизацией нескольких проектов с различными наборами серверов.

Структура проекта

/usr/local/bin/dsync ← глобальный скрипт

/workspace/project1/
├── train.py
├── .dsyncconfig
└── .dsyncignore

/workspace/project2/
├── train2.py
├── .dsyncconfig
└── .dsyncignore

Основные возможности

  • 🚀 Быстрая синхронизация - использует rsync для эффективной передачи файлов
  • 📊 Проверка статуса - показывает изменения перед синхронизацией
  • 🔧 Гибкая настройка - каждый проект имеет свою конфигурацию
  • 🚫 Игнорирование файлов - поддержка .dsyncignore для исключения файлов
  • 🌐 Множественные узлы - синхронизация с несколькими серверами одновременно
  • 🎨 Цветной вывод - понятная визуализация результатов
  • Параллельная обработка - проверка статуса всех узлов одновременно

Установка

  1. Скопируйте скрипт в глобальную директорию:
sudo cp dsync.py /usr/local/bin/dsync
sudo chmod +x /usr/local/bin/dsync
  1. Убедитесь, что у вас настроены SSH-ключи для доступа к удаленным серверам без пароля (Инструкция по настройке).

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

Инициализация проекта

cd /workspace/project1
dsync init

Создает файлы:

  • .dsyncconfig - конфигурация проекта
  • .dsyncignore - паттерны для игнорирования файлов

Управление узлами

# Добавить узлы для синхронизации
dsync add-node user@server1.com user@server2.com

# Удалить узел
dsync del-node user@server1.com

# Показать все узлы
dsync list-nodes

Синхронизация

# Проверить статус (что изменится)
dsync status

# Выполнить синхронизацию
dsync sync

Конфигурационные файлы

.dsyncconfig

{
  "master_dir": "/workspace/project1",
  "nodes": [
    "user@server1.com",
    "user@server2.com"
  ],
  "ignore_file": ".dsyncignore"
}

.dsyncignore

# Системные файлы
.git/
.gitignore
.dsyncconfig
.dsyncignore

# Python
__pycache__/
*.pyc
*.pyo
.venv/
venv/

# IDE
.vscode/
.idea/

# Логи
*.log

# Node.js
node_modules/
.npm

Примеры использования

Базовый workflow

# 1. Инициализация нового проекта
cd /workspace/ml-project
dsync init

# 2. Добавление серверов для обучения
dsync add-node gpu-server1.com gpu-server2.com

# 3. Проверка что будет синхронизировано
dsync status

# 4. Синхронизация
dsync sync

Вывод команды status

Checking status for 2 node(s)...
--------------------------------------------------
[OK] gpu-server1.com: Up to date

[!] gpu-server2.com: 3 change(s) pending
  NEW FILE: train.py
  UPDATE FILE: config.json (content, timestamp)
  DELETE: old_model.pkl

--------------------------------------------------
Summary: 2 active, 0 error(s), 3 total changes
Run 'dsync sync' to apply changes

Вывод команды sync

Syncing to gpu-server1.com:/workspace/ml-project...
[OK] Successfully synced to gpu-server1.com

Syncing to gpu-server2.com:/workspace/ml-project...
[OK] Successfully synced to gpu-server2.com

Sync completed: 2/2 nodes successful

Команды

Команда Описание
dsync init Инициализировать dsync в текущей директории
dsync add-node <node1> [node2...] Добавить один или несколько узлов
dsync del-node <node1> [node2...] Удалить один или несколько узлов
dsync list-nodes Показать все настроенные узлы
dsync status Показать статус синхронизации для всех узлов
dsync sync Синхронизировать со всеми настроенными узлами
dsync help Показать справку

Особенности

  • Удаление файлов: Использует rsync --delete для удаления файлов на удаленных серверах
  • Тайм-ауты: Автоматические тайм-ауты для избежания зависания
  • Параллельность: Проверка статуса всех узлов происходит параллельно
  • Безопасность: SSH-соединения с отключенной проверкой host key
  • Цветной вывод: Зеленый для успеха, желтый для предупреждений, красный для ошибок

Требования

  • Python 3.6+
  • rsync
  • SSH-доступ к удаленным серверам
  • Настроенные SSH-ключи для автоматической авторизации

Примечания

  • Каждый проект должен иметь свою конфигурацию
  • SSH-ключи должны быть настроены для работы без пароля (Настройка)
  • Изменения в .dsyncignore влияют на последующие синхронизации