|
|
# 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 <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-ключи должны быть настроены для работы без пароля ([Настройка](../ssh_setup.md))
|
|
|
- Изменения в `.dsyncignore` влияют на последующие синхронизации |