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.

197 lines
6.3 KiB

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 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` влияют на последующие синхронизации