# dsync - Утилита для синхронизации директорий **dsync** - это инструмент командной строки для синхронизации локальных проектов с удаленными серверами через SSH и rsync. Позволяет легко управлять синхронизацией нескольких проектов с различными наборами серверов. ## Структура проекта ``` /usr/local/bin/dsync ← глобальный скрипт /workspace/project1/ ├── train.py ├── .dsyncconfig └── .dsyncignore /workspace/project2/ ├── train2.py ├── .dsyncconfig └── .dsyncignore ``` ## Основные возможности - 🚀 **Быстрая синхронизация** - использует rsync для эффективной передачи файлов - 📊 **Проверка статуса** - показывает изменения перед синхронизацией - 🔧 **Гибкая настройка** - каждый проект имеет свою конфигурацию - 🚫 **Игнорирование файлов** - поддержка .dsyncignore для исключения файлов - 🌐 **Множественные узлы** - синхронизация с несколькими серверами одновременно - 🎨 **Цветной вывод** - понятная визуализация результатов - ⚡ **Параллельная обработка** - проверка статуса всех узлов одновременно ## Установка 1. Скопируйте скрипт в глобальную директорию: ```bash sudo cp dsync.py /usr/local/bin/dsync sudo chmod +x /usr/local/bin/dsync ``` 2. Убедитесь, что у вас настроены SSH-ключи для доступа к удаленным серверам без пароля ([Инструкция по настройке](../ssh_setup.md)). ## Использование ### Инициализация проекта ```bash cd /workspace/project1 dsync init ``` Создает файлы: - `.dsyncconfig` - конфигурация проекта - `.dsyncignore` - паттерны для игнорирования файлов ### Управление узлами ```bash # Добавить узлы для синхронизации dsync add-node user@server1.com user@server2.com # Удалить узел dsync del-node user@server1.com # Показать все узлы dsync list-nodes ``` ### Синхронизация ```bash # Проверить статус (что изменится) dsync status # Выполнить синхронизацию dsync sync ``` ## Конфигурационные файлы ### `.dsyncconfig` ```json { "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 ```bash # 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 [node2...]` | Добавить один или несколько узлов | | `dsync del-node [node2...]` | Удалить один или несколько узлов | | `dsync list-nodes` | Показать все настроенные узлы | | `dsync status` | Показать статус синхронизации для всех узлов | | `dsync sync` | Синхронизировать со всеми настроенными узлами | | `dsync help` | Показать справку | ## Особенности - **Удаление файлов**: Использует `rsync --delete` для удаления файлов на удаленных серверах - **Тайм-ауты**: Автоматические тайм-ауты для избежания зависания - **Параллельность**: Проверка статуса всех узлов происходит параллельно - **Безопасность**: SSH-соединения с отключенной проверкой host key - **Цветной вывод**: Зеленый для успеха, желтый для предупреждений, красный для ошибок ## Требования - Python 3.6+ - rsync - SSH-доступ к удаленным серверам - Настроенные SSH-ключи для автоматической авторизации ## Примечания - Каждый проект должен иметь свою конфигурацию - SSH-ключи должны быть настроены для работы без пароля ([Настройка](../ssh_setup.md)) - Изменения в `.dsyncignore` влияют на последующие синхронизации