Linux ๋ฏธ๋ฌ ์ ์ฅ์๋ฅผ ๋๊ธฐํํ๊ณ ๊ด๋ฆฌํ๋ CLI ๋๊ตฌ์ ๋๋ค.
xync๋ rsync, wget ๊ธฐ๋ฐ ๋ฏธ๋ฌ๋ง์ ์ค์ ํ์ผ๋ก ๊ด๋ฆฌํ๊ณ , ์ํ ํ์ธยท๋ก๊ทธ ์กฐํยท๋ฐ๋ชฌ ์คํยทREST APIยทTelegram/Discord ์๋ฆผ๊น์ง ์ ๊ณตํฉ๋๋ค.
- rsync ๋ฏธ๋ฌ ๋๊ธฐํ:
rsync://์์ค ๋๊ธฐํ, ์ต์ ์ปค์คํฐ๋ง์ด์ง, ๋์ญํญ ์ ํ ์ง์ - HTTP/HTTPS/FTP ๋ฏธ๋ฌ ๋๊ธฐํ:
wget๊ธฐ๋ฐ ๋ฏธ๋ฌ๋ง ์ง์ - ๋ฏธ๋ฌ ๋ณ๊ฒฝ ๋ฏธ๋ฆฌ๋ณด๊ธฐ:
xync mirror diff๋กrsync --dry-run --itemize-changes๊ฒฐ๊ณผ ํ์ธ - ๋ณ๋ ฌ ๋๊ธฐํ:
parallel_jobs์ค์ ์ผ๋ก ์ฌ๋ฌ ๋ฏธ๋ฌ๋ฅผ ๋์์ ๋๊ธฐํ - ๋ฐฑ๊ทธ๋ผ์ด๋ ๋ฐ๋ชฌ: interval ๋๋ cron schedule ๊ธฐ๋ฐ ์๋ ๋๊ธฐํ
- REST API: ๋ฏธ๋ฌ ๋ชฉ๋ก, ์ํ, ํฌ๊ธฐ ์ ๋ณด๋ฅผ HTTP API๋ก ์กฐํ
- ์๋ฆผ: Telegram Bot API, Discord Webhook ์๋ฆผ ์ง์
- ์ํ/๋ก๊ทธ ๊ด๋ฆฌ: ๋ง์ง๋ง ๋๊ธฐํ ์ํ, ํฌ๊ธฐ ๋ณํ, ์คํ ๋ก๊ทธ ์กฐํ
- ํฌ์ค ์ฒดํฌ: ํ์ ๋๊ตฌ, ๊ฒฝ๋ก ๊ถํ, URL ์คํด, ๋์คํฌ ์ฌ์ฉ๋ฅ ๊ฒ์ฌ
- Rich CLI ์ถ๋ ฅ: ํ ์ด๋ธ, ์์, ์ํ ํ์๋ฅผ ํ์ฉํ ์ฝ๊ธฐ ์ฌ์ด ์ถ๋ ฅ
- Linux ํ๊ฒฝ
uvํจํค์ง/ํด ๋งค๋์ rsyncโ rsync ๋ฏธ๋ฌ ์ฌ์ฉ ์ ํ์wgetโ HTTP/HTTPS/FTP ๋ฏธ๋ฌ ์ฌ์ฉ ์ ํ์
uv tool install xync
xync --help์ ๋ฐ์ดํธ:
uv tool upgrade xync์ ๊ฑฐ:
uv tool uninstall xyncTip
uv tool install์ CLI ์ ํ๋ฆฌ์ผ์ด์
์ ๊ฒฉ๋ฆฌ๋ ํ๊ฒฝ์ ์ค์นํ๊ณ ์คํ ํ์ผ์ PATH์ ๋
ธ์ถํฉ๋๋ค. PATH ์ค์ ์ด ํ์ํ๋ค๋ ์๋ด๊ฐ ๋์ค๋ฉด uv tool update-shell์ ์คํํ๊ฑฐ๋ uv๊ฐ ์๋ดํ๋ ๊ฒฝ๋ก๋ฅผ ์
ธ PATH์ ์ถ๊ฐํ์ธ์.
git clone https://github.com/xeon-dot/xync.git
cd xync
uv tool install .
xync --helpgit clone https://github.com/xeon-dot/xync.git
cd xync
uv sync
uv run xync --help# 1. ์ค์ ํ์ผ ์ด๊ธฐํ
xync init
# 2. rsync ๋ฏธ๋ฌ ์ถ๊ฐ
xync mirror add ubuntu rsync://mirror.kakao.com/ubuntu /srv/mirrors/ubuntu
# 3. HTTP ๋ฏธ๋ฌ ์ถ๊ฐ
xync mirror add debian http://ftp.debian.org/debian /srv/mirrors/debian --type http
# 4. ๋ฑ๋ก๋ ๋ฏธ๋ฌ ํ์ธ
xync mirror list
# 5. ๋๊ธฐํ ์คํ
xync sync
# 6. ์ํ ํ์ธ
xync status์ค์ ํ์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก ๋ค์ ์์น์ ์์ฑ๋ฉ๋๋ค.
~/.config/xync/config.toml
๋ค๋ฅธ ์ค์ ๋๋ ํฐ๋ฆฌ๋ฅผ ์ฐ๊ณ ์ถ๋ค๋ฉด ๋ชจ๋ ๋ช
๋ น์ --config-dir ๋๋ -C๋ฅผ ์ฌ์ฉํ ์ ์์ต๋๋ค.
xync status --config-dir /etc/xyncํ๊ฒฝ ๋ณ์๋ก๋ ์ง์ ํ ์ ์์ต๋๋ค.
export xync_CONFIG_DIR=/etc/xync
xync status์ค์ ๋๋ ํฐ๋ฆฌ์ ๊ธฐ๋ณธ ์ค์ ํ์ผ์ ์์ฑํฉ๋๋ค.
xync init
xync init --config-dir /etc/xync๋ฏธ๋ฌ๋ฅผ ์ถ๊ฐํฉ๋๋ค.
xync mirror add NAME URL LOCAL_PATH [OPTIONS]์์:
xync mirror add ubuntu rsync://mirror.kakao.com/ubuntu /srv/mirrors/ubuntu
xync mirror add debian http://ftp.debian.org/debian /srv/mirrors/debian --type http
xync mirror add arch rsync://mirror.example.org/archlinux /srv/mirrors/arch --bwlimit 50m์ต์ :
| ์ต์ | ์ค๋ช |
|---|---|
--type, -t |
๋ฏธ๋ฌ ํ์
: rsync, http, ftp |
--description, -d |
๋ฏธ๋ฌ ์ค๋ช |
--bwlimit, -b |
rsync ๋์ญํญ ์ ํ. ์: 10m, 50m |
--rsync-opts |
๊ธฐ๋ณธ rsync ์ต์ ์ ๋์ฒดํ ์ต์ ๋ฌธ์์ด |
๋ฏธ๋ฌ ์ด๋ฆ์ ์๋ฌธ/์ซ์/ํ์ดํ/์ธ๋์ค์ฝ์ด๋ง ์ฌ์ฉํ ์ ์์ต๋๋ค.
๋ฑ๋ก๋ ๋ฏธ๋ฌ ๋ชฉ๋ก์ ์ถ๋ ฅํฉ๋๋ค.
xync mirror listํน์ ๋ฏธ๋ฌ์ ์์ธ ์ค์ ์ ์ถ๋ ฅํฉ๋๋ค.
xync mirror show ubuntu๋ฏธ๋ฌ๋ฅผ ํ์ฑํํ๊ฑฐ๋ ๋นํ์ฑํํฉ๋๋ค. ๋นํ์ฑํ๋ ๋ฏธ๋ฌ๋ ์ ์ฒด ๋๊ธฐํ์์ ์ ์ธ๋ฉ๋๋ค.
xync mirror disable ubuntu
xync mirror enable ubuntursync ๋ฏธ๋ฌ์์ ์ค์ ๋๊ธฐํ ์ ์ ๋ณ๊ฒฝ๋ ํญ๋ชฉ์ ํ์ธํฉ๋๋ค.
xync mirror diff ubuntu
mirror diff๋ rsync ๋ฏธ๋ฌ์์๋ง ๋์ํฉ๋๋ค.
๋ฏธ๋ฌ ์ค์ ์ ์ ๊ฑฐํฉ๋๋ค.
xync mirror remove ubuntu
xync mirror remove ubuntu --yesํ์ฑํ๋ ์ ์ฒด ๋ฏธ๋ฌ ๋๋ ์ง์ ํ ๋ฏธ๋ฌ๋ฅผ ๋๊ธฐํํฉ๋๋ค.
# ์ ์ฒด ํ์ฑ ๋ฏธ๋ฌ ๋๊ธฐํ
xync sync
# ํน์ ๋ฏธ๋ฌ๋ง ๋๊ธฐํ
xync sync ubuntu
# ์ฌ๋ฌ ๋ฏธ๋ฌ ๋๊ธฐํ
xync sync ubuntu debian์ต์ :
| ์ต์ | ์ค๋ช |
|---|---|
--dry-run, -n |
์ค์ ์คํ ์์ด ๋๊ธฐํ ๋ช ๋ น๋ง ์ถ๋ ฅ |
--verbose, -v |
ํ์ ํ๋ก์ธ์ค ์ถ๋ ฅ์ ์ฝ์์ ํ์ |
์์:
xync sync ubuntu --dry-run
xync sync ubuntu --verbose๋ฏธ๋ฌ์ ๋ง์ง๋ง ๋๊ธฐํ ์ํ, ์๊ฐ, ํฌ๊ธฐ, ํฌ๊ธฐ ๋ณํ๋์ ์ถ๋ ฅํฉ๋๋ค.
xync status
xync status ubuntu debianํน์ ๋ฏธ๋ฌ์ ์ต์ ๋๊ธฐํ ๋ก๊ทธ๋ฅผ ์ถ๋ ฅํฉ๋๋ค.
xync log ubuntu
xync log ubuntu --lines 100์ค์ ํ์ผ, ํ์ ๋๊ตฌ, URL ์คํด, ๋ก์ปฌ ๊ฒฝ๋ก ๊ถํ, ๋์คํฌ ์ฌ์ฉ๋ฅ , ์๋ฆผ ์ค์ (ํ ๋ ๊ทธ๋จ/๋์ค์ฝ๋)์ ์ ๊ฒํฉ๋๋ค.
xync health
xync health ubuntuxync daemon์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ์ฃผ๊ธฐ์ ์ผ๋ก ๋ฏธ๋ฌ๋ฅผ ๋๊ธฐํํฉ๋๋ค.
xync daemon startํน์ ๋ฏธ๋ฌ๋ง ๋์์ผ๋ก ์คํ:
xync daemon start ubuntu debian๋๊ธฐํ ์ฃผ๊ธฐ๋ฅผ ๋ช ๋ น์์ ์ง์ :
xync daemon start --interval 3600API ์๋ฒ๋ฅผ ํจ๊ป ์คํ:
xync daemon start --api --api-port 58080xync daemon statusxync daemon stop
xync daemon stop --forcexync daemon restart
xync daemon restart --interval 1800 --api๋ฐ๋ชฌ์ ๊ธฐ๋ณธ์ ์ผ๋ก ์ค์ ๋๋ ํฐ๋ฆฌ์ PID ํ์ผ๊ณผ ๋ก๊ทธ ํ์ผ์ ์์ฑํฉ๋๋ค.
API ์๋ฒ๋ ๋ฏธ๋ฌ ์ํ๋ฅผ HTTP๋ก ์กฐํํ ์ ์๊ฒ ํฉ๋๋ค.
xync api start
xync api start --port 58080xync api status
xync api stop
xync api stop --force| Method | Path | ์ค๋ช |
|---|---|---|
GET |
/api/status |
์ ์ฒด ๋ฏธ๋ฌ ์ํ์ ๋ฐ๋ชฌ ์ํ |
GET |
/api/mirrors |
๋ฏธ๋ฌ ์ด๋ฆ ๋ชฉ๋ก |
GET |
/api/mirrors/{name} |
ํน์ ๋ฏธ๋ฌ ์ํ |
GET |
/api/mirrors/{name}/size |
ํน์ ๋ฏธ๋ฌ ํฌ๊ธฐ ์ ๋ณด |
์์:
curl http://127.0.0.1:58080/api/statusTelegram๊ณผ Discord ์๋ฆผ์ ์ค์ ํ ์ ์์ต๋๋ค.
์ง์ ์ด๋ฒคํธ:
- ๋๊ธฐํ ์ฑ๊ณต
- ๋๊ธฐํ ์คํจ
- ๋๊ธฐํ ์์
- ๋๊ธฐํ ์ข ๋ฃ
- ์งํ๋ฅ 10% ๋จ์ ์๋ฆผ
- ๋์คํฌ ์ฌ์ฉ๋ฅ ์๊ณ์น ์ด๊ณผ ๊ฒฝ๊ณ
xync config set telegram.bot_token "123456:ABC-DEF"
xync config set telegram.chat_id "-100123456"xync config set discord.bot_token "YOUR_DISCORD_BOT_TOKEN"
xync config set discord.channel_id "123456789012345678"xync config set telegram.notify_on_start true
xync config set telegram.notify_on_progress true
xync config set discord.notify_on_failure truexync notify test
xync notify test telegram
xync notify test discord์ ์ญ ์ค์ ์ xync config set KEY VALUE๋ก ๋ณ๊ฒฝํ ์ ์์ต๋๋ค.
xync config show
xync config set parallel_jobs 4
xync config set daemon_interval 3600
xync config set daemon_schedule "0 */6 * * *"
xync config set disk_usage_warning_percent 85| ํค | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
|---|---|---|
default_rsync_options |
-avz --delete |
๊ธฐ๋ณธ rsync ์ต์ |
log_dir |
์ค์ ๋๋ ํฐ๋ฆฌ์ logs |
๋๊ธฐํ ๋ก๊ทธ ์ ์ฅ ๊ฒฝ๋ก |
max_log_files |
30 |
๋ฏธ๋ฌ๋ณ ๋ณด๊ดํ ์ต๋ ๋ก๊ทธ ํ์ผ ์ |
parallel_jobs |
1 |
๋ณ๋ ฌ ๋๊ธฐํ ์์ ์ |
daemon_interval |
3600 |
๋ฐ๋ชฌ ๋๊ธฐํ ์ฃผ๊ธฐ(์ด) |
daemon_schedule |
๋น์ด ์์ | cron ํํ์ ๊ธฐ๋ฐ ์ค์ผ์ค |
api_enabled |
false |
๋ฐ๋ชฌ ์์ ์ API ์๋ฒ ํจ๊ป ์คํ |
api_port |
58080 |
API ์๋ฒ ํฌํธ |
disk_usage_warning_percent |
90 |
๋์คํฌ ์ฌ์ฉ๋ฅ ๊ฒฝ๊ณ ์๊ณ์น |
telegram.bot_token |
์์ | Telegram Bot API ํ ํฐ |
telegram.chat_id |
์์ | Telegram ์ฑํ ID |
discord.bot_token |
์์ | Discord ๋ด ํ ํฐ |
discord.channel_id |
์์ | Discord ์ฑ๋ ID |
์๋ฆผ ํ๋๊ทธ๋ Telegram/Discord ๊ฐ๊ฐ์ ๋ํด ์ค์ ํ ์ ์์ต๋๋ค.
| ํค ํจํด | ๊ธฐ๋ณธ๊ฐ | ์ค๋ช |
|---|---|---|
*.notify_on_success |
true |
์ฑ๊ณต ์ ์๋ฆผ |
*.notify_on_failure |
true |
์คํจ ์ ์๋ฆผ |
*.notify_on_start |
false |
์์ ์ ์๋ฆผ |
*.notify_on_finish |
false |
์ข ๋ฃ ์ ์๋ฆผ |
*.notify_on_progress |
false |
์งํ๋ฅ 10% ๋จ์ ์๋ฆผ |
์์:
xync config set telegram.notify_on_success true
xync config set discord.notify_on_progress falseversion = 1
[global]
default_rsync_options = ["-avz", "--delete"]
log_dir = ""
max_log_files = 30
parallel_jobs = 1
daemon_interval = 3600
daemon_schedule = ""
api_enabled = false
api_port = 58080
disk_usage_warning_percent = 90
[global.telegram]
bot_token = ""
chat_id = ""
notify_on_success = true
notify_on_failure = true
notify_on_start = false
notify_on_finish = false
notify_on_progress = false
[global.discord]
bot_token = ""
channel_id = ""
notify_on_success = true
notify_on_failure = true
notify_on_start = false
notify_on_finish = false
notify_on_progress = false
[mirrors.ubuntu]
url = "rsync://mirror.kakao.com/ubuntu"
local_path = "/srv/mirrors/ubuntu"
mirror_type = "rsync"
enabled = true
description = "Ubuntu mirror"
rsync_options = ["-avz", "--delete"]
http_options = []
bandwidth_limit = "50m"
last_status = "never"๋ฐ๋ชฌ์ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๋์ํ ์ ์์ต๋๋ค.
daemon_interval ์ด๋ง๋ค ๋๊ธฐํํฉ๋๋ค.
xync config set daemon_interval 3600
xync daemon startdaemon_schedule์ cron ํํ์์ ์ค์ ํ๋ฉด ํด๋น ์ค์ผ์ค์ ์ฌ์ฉํฉ๋๋ค.
xync config set daemon_schedule "0 */6 * * *"
xync daemon start์์ cron ํํ์:
| ํํ์ | ์๋ฏธ |
|---|---|
0 */6 * * * |
6์๊ฐ๋ง๋ค ์ ๊ฐ |
0 3 * * * |
๋งค์ผ 03:00 |
30 2 * * 0 |
๋งค์ฃผ ์ผ์์ผ 02:30 |
Typer ๊ธฐ๋ฐ ์๋์์ฑ์ ์ฌ์ฉํ ์ ์์ต๋๋ค.
xync --install-completion์ง์ ์ ธ์ Typer๊ฐ ๊ฐ์งํฉ๋๋ค. ์ค์น ํ ์ ์ ธ์ ์ด๊ฑฐ๋ ์ ธ ์ค์ ํ์ผ์ ๋ค์ ๋ก๋ํ์ธ์.
# ์์กด์ฑ ์ค์น
uv sync
# CLI ์คํ
uv run xync --help
# ํ
์คํธ
uv run pytest
# ํน์ ํ
์คํธ ์คํ
uv run pytest tests/test_cli.py -v
# ๋ฆฐํธ
uv run ruff check src/ tests/๋น๋:
uv buildrsync ๋ฏธ๋ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด rsync๊ฐ ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
sudo apt install -y rsyncHTTP/HTTPS/FTP ๋ฏธ๋ฌ๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด wget์ด ์ค์น๋์ด ์์ด์ผ ํฉ๋๋ค.
sudo apt install -y wget๋๊ธฐํ ๋์ ๊ฒฝ๋ก์ ๋ถ๋ชจ ๋๋ ํฐ๋ฆฌ๊ฐ ์กด์ฌํ๊ณ , ํ์ฌ ์ฌ์ฉ์๊ฐ ์ธ ์ ์์ด์ผ ํฉ๋๋ค.
sudo mkdir -p /srv/mirrors/ubuntu
sudo chown -R "$USER:$USER" /srv/mirrors/ubuntu
xync health ubuntuxync config show
xync health