diff --git a/README.md b/README.md index 7b6a6c7..642847c 100644 --- a/README.md +++ b/README.md @@ -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 [node2...]` | Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΡƒΠ·Π»ΠΎΠ² | -| `dsync del-node [node2...]` | Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ΄ΠΈΠ½ ΠΈΠ»ΠΈ нСсколько ΡƒΠ·Π»ΠΎΠ² | -| `dsync list-nodes` | ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ всС настроСнныС ΡƒΠ·Π»Ρ‹ | -| `dsync status` | ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ статус синхронизации для всСх ΡƒΠ·Π»ΠΎΠ² | -| `dsync sync` | Π‘ΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ со всСми настроСнными ΡƒΠ·Π»Π°ΠΌΠΈ | -| `dsync help` | ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ справку | +| Команда | ОписаниС | +| ---------------------------------------- | ------------------------------------------------------------------------------------- | +| `dsync init` | Π˜Π½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ dsync Π² Ρ‚Π΅ΠΊΡƒΡ‰Π΅ΠΉ Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ | +| `dsync add-node [node2 ...]` | Π”ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ Π½ΠΎΠ΄Ρ‹. Π€ΠΎΡ€ΠΌΠ°Ρ‚Ρ‹: `user@host`, `user@host:/dir`, Π»ΠΈΠ±ΠΎ `add-node user@host /dir` | +| `dsync del-node [node2 ...]` | Π£Π΄Π°Π»ΠΈΡ‚ΡŒ ΠΎΠ΄Π½Ρƒ ΠΈΠ»ΠΈ нСсколько Π½ΠΎΠ΄ | +| `dsync set-node-dir ` | Π£ΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ/ΠΈΠ·ΠΌΠ΅Π½ΠΈΡ‚ΡŒ ΡƒΠ΄Π°Π»Ρ‘Π½Π½Ρ‹ΠΉ ΠΏΡƒΡ‚ΡŒ для Π½ΠΎΠ΄Ρ‹ | +| `dsync clear-node-dir ` | Π‘Π±Ρ€ΠΎΡΠΈΡ‚ΡŒ ΠΏΡƒΡ‚ΡŒ Π½ΠΎΠ΄Ρ‹ (Π±ΡƒΠ΄Π΅Ρ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ `master_dir`) | +| `dsync list-nodes` | ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π½ΠΎΠ΄Ρ‹ с фактичСскими путями | +| `dsync status` | ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ ΠΎΠΆΠΈΠ΄Π°Π΅ΠΌΡ‹Π΅ измСнСния ΠΏΠΎ всСм Π½ΠΎΠ΄Π°ΠΌ | +| `dsync sync` | Π’Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ ΡΠΈΠ½Ρ…Ρ€ΠΎΠ½ΠΈΠ·Π°Ρ†ΠΈΡŽ Π½Π° всС Π½ΠΎΠ΄Ρ‹ | +| `dsync help` | ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ справку | +| `dsync version` | ΠŸΠΎΠΊΠ°Π·Π°Ρ‚ΡŒ Π²Π΅Ρ€ΡΠΈΡŽ | + ## ΠžΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΠΈ @@ -193,4 +243,5 @@ Sync completed: 2/2 nodes successful - ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΈΠΌΠ΅Ρ‚ΡŒ свою ΠΊΠΎΠ½Ρ„ΠΈΠ³ΡƒΡ€Π°Ρ†ΠΈΡŽ - SSH-ΠΊΠ»ΡŽΡ‡ΠΈ Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Π±Ρ‹Ρ‚ΡŒ настроСны для Ρ€Π°Π±ΠΎΡ‚Ρ‹ Π±Π΅Π· пароля -- ИзмСнСния Π² `.dsyncignore` Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ синхронизации \ No newline at end of file +- ИзмСнСния Π² `.dsyncignore` Π²Π»ΠΈΡΡŽΡ‚ Π½Π° ΠΏΠΎΡΠ»Π΅Π΄ΡƒΡŽΡ‰ΠΈΠ΅ синхронизации +- ΠŸΡƒΡ‚ΠΈ с ΠΏΡ€ΠΎΠ±Π΅Π»Π°ΠΌΠΈ экранируйтС ΠΊΠ°Π²Ρ‹Ρ‡ΠΊΠ°ΠΌΠΈ: `dsync set-node-dir user@host "/srv/projects with space/p1"` \ No newline at end of file