|
|
|
|
@ -23,6 +23,7 @@
|
|
|
|
|
- 🔧 **Гибкая настройка** - каждый проект имеет свою конфигурацию
|
|
|
|
|
- 🚫 **Игнорирование файлов** - поддержка .dsyncignore для исключения файлов
|
|
|
|
|
- 🌐 **Множественные узлы** - синхронизация с несколькими серверами одновременно
|
|
|
|
|
- 🗂️ Пер-нодовые пути — remote_dir на каждую ноду
|
|
|
|
|
- 🎨 **Цветной вывод** - понятная визуализация результатов
|
|
|
|
|
- ⚡ **Параллельная обработка** - проверка статуса всех узлов одновременно
|
|
|
|
|
|
|
|
|
|
@ -55,7 +56,7 @@ dsync init
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Добавить узлы для синхронизации
|
|
|
|
|
dsync add-node user@server1.com user@server2.com
|
|
|
|
|
dsync add-node user@server1.com user@server2.com:/workspace/data user@server3.net:~/configs
|
|
|
|
|
|
|
|
|
|
# Удалить узел
|
|
|
|
|
dsync del-node user@server1.com
|
|
|
|
|
@ -67,7 +68,7 @@ dsync list-nodes
|
|
|
|
|
### Синхронизация
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Проверить статус (что изменится)
|
|
|
|
|
# Проверить статус
|
|
|
|
|
dsync status
|
|
|
|
|
|
|
|
|
|
# Выполнить синхронизацию
|
|
|
|
|
@ -81,8 +82,8 @@ dsync sync
|
|
|
|
|
{
|
|
|
|
|
"master_dir": "/workspace/project1",
|
|
|
|
|
"nodes": [
|
|
|
|
|
"user@server1.com",
|
|
|
|
|
"user@server2.com"
|
|
|
|
|
{ "name": "user@server1", "remote_dir": "/srv/projects/p1" },
|
|
|
|
|
{ "name": "user@server3", "remote_dir": null }
|
|
|
|
|
],
|
|
|
|
|
"ignore_file": ".dsyncignore"
|
|
|
|
|
}
|
|
|
|
|
@ -134,16 +135,61 @@ dsync status
|
|
|
|
|
dsync sync
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Форматы указания нод
|
|
|
|
|
|
|
|
|
|
Можно указывать ноды несколькими способами:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# 1) Без пути — возьмётся master_dir из .dsyncconfig
|
|
|
|
|
dsync add-node user@server1
|
|
|
|
|
|
|
|
|
|
# 2) С путём в одном токене
|
|
|
|
|
dsync add-node user@server1:/remote/project1
|
|
|
|
|
|
|
|
|
|
# 3) Альтернативная форма для одной ноды — двумя аргументами
|
|
|
|
|
dsync add-node user@server2 /another/dir
|
|
|
|
|
|
|
|
|
|
# 4) Смешанно и сразу несколько
|
|
|
|
|
dsync add-node user@h1 user@h2:/work/a user@h3 /work/b
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Управление нодами
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
# Добавить ноды
|
|
|
|
|
dsync add-node user@server1 user@server2:/srv/ml/project
|
|
|
|
|
|
|
|
|
|
# Изменить путь у существующей ноды
|
|
|
|
|
dsync set-node-dir user@server1 /srv/projects/p1
|
|
|
|
|
|
|
|
|
|
# Сбросить путь (использовать master_dir)
|
|
|
|
|
dsync clear-node-dir user@server1
|
|
|
|
|
|
|
|
|
|
# Удалить ноду
|
|
|
|
|
dsync del-node user@server2
|
|
|
|
|
|
|
|
|
|
# Показать все ноды с их фактическими путями
|
|
|
|
|
dsync list-nodes
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Вывод команды list-nodes
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Configured nodes:
|
|
|
|
|
1. user@server1 -> /srv/projects/p1
|
|
|
|
|
2. user@server3 -> /workspace/project1 # взят master_dir
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
### Вывод команды status
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Checking status for 2 node(s)...
|
|
|
|
|
--------------------------------------------------
|
|
|
|
|
[OK] gpu-server1.com: Up to date
|
|
|
|
|
[OK] user@server1 (/srv/projects/p1): Up to date
|
|
|
|
|
|
|
|
|
|
[!] gpu-server2.com: 3 change(s) pending
|
|
|
|
|
[!] user@server3 (/workspace/project1): 3 change(s) pending
|
|
|
|
|
NEW FILE: train.py
|
|
|
|
|
UPDATE FILE: config.json (content, timestamp)
|
|
|
|
|
SEND FILE: config.json (content, timestamp)
|
|
|
|
|
DELETE: old_model.pkl
|
|
|
|
|
|
|
|
|
|
--------------------------------------------------
|
|
|
|
|
@ -154,26 +200,30 @@ Run 'dsync sync' to apply changes
|
|
|
|
|
### Вывод команды sync
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
Syncing to gpu-server1.com:/workspace/ml-project...
|
|
|
|
|
[OK] Successfully synced to gpu-server1.com
|
|
|
|
|
Syncing to user@server1:/srv/projects/p1...
|
|
|
|
|
[OK] Successfully synced to user@server1 (/srv/projects/p1)
|
|
|
|
|
|
|
|
|
|
Syncing to gpu-server2.com:/workspace/ml-project...
|
|
|
|
|
[OK] Successfully synced to gpu-server2.com
|
|
|
|
|
Syncing to user@server3:/workspace/project1...
|
|
|
|
|
[OK] Successfully synced to user@server3 (/workspace/project1)
|
|
|
|
|
|
|
|
|
|
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` | Показать справку |
|
|
|
|
|
| Команда | Описание |
|
|
|
|
|
| ---------------------------------------- | ------------------------------------------------------------------------------------- |
|
|
|
|
|
| `dsync init` | Инициализировать dsync в текущей директории |
|
|
|
|
|
| `dsync add-node <node1> [node2 ...]` | Добавить ноды. Форматы: `user@host`, `user@host:/dir`, либо `add-node user@host /dir` |
|
|
|
|
|
| `dsync del-node <node1> [node2 ...]` | Удалить одну или несколько нод |
|
|
|
|
|
| `dsync set-node-dir <node> <remote_dir>` | Установить/изменить удалённый путь для ноды |
|
|
|
|
|
| `dsync clear-node-dir <node>` | Сбросить путь ноды (будет использоваться `master_dir`) |
|
|
|
|
|
| `dsync list-nodes` | Показать ноды с фактическими путями |
|
|
|
|
|
| `dsync status` | Показать ожидаемые изменения по всем нодам |
|
|
|
|
|
| `dsync sync` | Выполнить синхронизацию на все ноды |
|
|
|
|
|
| `dsync help` | Показать справку |
|
|
|
|
|
| `dsync version` | Показать версию |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
## Особенности
|
|
|
|
|
|
|
|
|
|
@ -194,3 +244,4 @@ Sync completed: 2/2 nodes successful
|
|
|
|
|
- Каждый проект должен иметь свою конфигурацию
|
|
|
|
|
- SSH-ключи должны быть настроены для работы без пароля
|
|
|
|
|
- Изменения в `.dsyncignore` влияют на последующие синхронизации
|
|
|
|
|
- Пути с пробелами экранируйте кавычками: `dsync set-node-dir user@host "/srv/projects with space/p1"`
|