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
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 для исключения файлов
- 🌐 Множественные узлы - синхронизация с несколькими серверами одновременно
- 🎨 Цветной вывод - понятная визуализация результатов
- ⚡ Параллельная обработка - проверка статуса всех узлов одновременно
Установка
- Скопируйте скрипт в глобальную директорию:
sudo cp dsync.py /usr/local/bin/dsync
sudo chmod +x /usr/local/bin/dsync
- Убедитесь, что у вас настроены 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
влияют на последующие синхронизации