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ç.
ignore
mekanizması sayesinde, üst dizini kök (root) olarak tanımlayıp istemediğim alt dizinleri dışarıda bırakabiliyorum.systemd service + timer
kullanarak da bu senkronizasyonu sadece geceleri çalışacak şekilde sınırladım.
Böylece:
- Dosyalar 00:00’da eşitlenmeye başlıyor
- Sabah 06:00’da senkronizasyon servisi duruyor
- Gün içinde kaynak/hedef dizinlere dokunulmuyor
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.
- Unison ile iki yönlü güvenli eşitleme sağladım.
ignore
kurallarıyla istemediğim dizinleri dışarıda bıraktım.- systemd timer sayesinde işlem tam istediğim saatlerde otomatik başlıyor ve bitiyor.
Artık manuel müdahale etmeye gerek kalmadan, dosyalarım her gece kendiliğinden güncelleniyor.