DHY

Gece Belirli Saatlerde İki Dizin Arasında Senkronizasyon (Unison + systemd)

Problem

Sunucumda belirli dizinlerin sadece geceleri 00:00–06:00 arasında birbirleriyle senkronize çalışmasını istiyordum.
Bunu elle yapmak zahmetli, rsync gibi araçlar ise tek yönlü çalışıyor. Bana syncthing’e benzer ama tamamen local, iki yönlü ve zaman kontrollü bir çözüm lazımdı.

Çözüm

Bu ihtiyacı karşılamak için Unison aracını kullandım. Unison, iki dizini eş zamanlı ve iki yönlü olarak senkronize edebilen, local veya network üzerinde çalışabilen bir araç.

Böylece:

Kodlar / Konfigürasyon

1. Unison kurulumu

# Debian/Ubuntu
sudo apt install unison

# Arch Linux
sudo pacman -S unison

2. Unison profil dosyası

~/.unison/local.prf

root = /data
root = /backup/data

auto = true
batch = true
prefer = newer
confirmbigdeletes = true
fastcheck = true

log = true
logfile = /var/log/unison.log

# Ignore mekanizması
ignore = Name {.git}
ignore = Name {node_modules}
ignore = Name {*.tmp}
ignore = Path {cache}
ignore = BelowPath {var/tmp}
ignore = Regex (?i)\.DS_Store$

3. Unison servis dosyası

/etc/systemd/system/unison-local.service

[Unit]
Description=Unison iki yönlü senkronizasyon (local)
After=network.target

[Service]
ExecStart=/usr/bin/unison local -repeat watch
Restart=always
User=USERNAME
Group=USERNAME
Nice=10
IOSchedulingClass=best-effort
IOSchedulingPriority=7

4. Timer dosyaları

Başlatma (00:00): /etc/systemd/system/unison-local-start.timer

[Unit]
Description=Unison gece senkron baslat (00:00)

[Timer]
OnCalendar=*-*-* 00:00:00
Persistent=true

[Install]
WantedBy=timers.target

Durdurma (06:00): /etc/systemd/system/unison-local-stop.timer

[Unit]
Description=Unison sabah senkron durdur (06:00)

[Timer]
OnCalendar=*-*-* 06:00:00
Persistent=true

[Install]
WantedBy=timers.target

5. Wrapper servisler

Başlat: /etc/systemd/system/unison-local-start.service

[Unit]
Description=Unison servisini başlat
[Service]
Type=oneshot
ExecStart=/bin/systemctl start unison-local.service

Durdur: /etc/systemd/system/unison-local-stop.service

[Unit]
Description=Unison servisini durdur
[Service]
Type=oneshot
ExecStart=/bin/systemctl stop unison-local.service

6. Etkinleştirme

sudo systemctl daemon-reload
sudo systemctl enable --now unison-local-start.timer
sudo systemctl enable --now unison-local-stop.timer

7. Kontrol

systemctl list-timers | grep unison
journalctl -u unison-local.service -e

Sonuç

Bu kurulum sayesinde geceleri 00:00–06:00 arasında iki dizin kendiliğinden senkronize oluyor.

Artık manuel müdahale etmeye gerek kalmadan, dosyalarım her gece kendiliğinden güncelleniyor.