Araştırmalarım ile birşeyler yazmaya çalıştım..
#!/bin/bash
#Dizin belirtiyoruz
DIZIN="/degisikliklerin/kaydedilecegi/dizin/yolu"
#Değişikliker timestamp damgası ile klasör oluşturulup içine atılacak
INCREMENTDIR=`date +%s`
#Değişikliklerin yükleneceği klasör
YOLU="/degisiklikler/"
#DIZIN, YOLU ve INCREMENTDIR yollarını birleştiriyoruz. Backup alınacak tam yolu belirliyoruz.
BIRLESTIR="$DIZIN$YOLU$INCREMENTDIR"
#Yedekleme gün sonu hangi dizine yapılacak
BACKUPDIR="/gun/sonu/tam/backup/alinacak/dizin"
#Gün sonu yedekleme ismi
TARIH=`date +%Y-%m-%d`
#Uzak sunucu yolu
UZAKSUNUCU="root@ipadresi:/yedek/alinacak/tam/dizin/yolu"
#Yedek sunucu yolu
YEDEKSUNUCU="/yedek/sunucu/yedek/tam/dizin/yolu"
#Ne zaman yedekler silinecek
expired=30
#rsync kodumuz
sshpass -p "rootsifresiburaya" rsync --backup --backup-dir=$BIRLESTIR -av $UZAKSUNUCU $YEDEKSUNUCU
#Değişikliklerin olduğu dizine gidiyoruz.
cd $DIZIN$YOLU
#klasörler listelenip silmeye çalışılıyor. Eğer içi boşsa silinecektir.
ls -d */ | while read d
do
rmdir $d
done
#Bu Alan Günde 1 Kere Çalışmalı. Bu işlem bitmeden cron başka işlem yapmamalı.
cd $BACKUPDIR
#DIZIN yolu tar.gz olarak sıkıştırılıyor.
tar -czf $TARIH.tar.gz $DIZIN
#Değişiklikler klasörü siliniyor.
rm -r $DIZIN$YOLU
#BACKUPDIR içinde belirtilen günden uzun olanlar siliniyor.
find $BACKUPDIR -type d -mtime +$expired | xargs rm -Rf
Yukarıdaki betikte rsync yardımıyla değişen dosyaları değiştirmeden önce timestamp ile oluşturulan klasöre var olan dosyaları yedekleyip yenisi ile değiştiriyor.
Değişen birşey yoksa yinede degisikler klasörüne timestamp ile yeni bir klasör oluşturuyor rmdir ile boş ise oluşturduğu klasörü sildiriyorum.
Şimdi yapmak istediğim betikte yer alan
#Bu Alan Günde 1 Kere Çalışmalı. Bu işlem bitmeden cron başka işlem yapmamalı.
yazının altında kalan işlemi günde 1 kere yapacak şekilde ayarlamak ve bu işlem bitmeden diğer cron işlemi çağrılsa bile işlem yapmamasını sağlamak.
böylece gün sonunda tam yedek oluştururken yeni bir cron işlemine maruz kalmamasını sağlamalıyım.
Ayrıca değişiklik yoksa yinede klasör oluşturmasını engelleyebilir miyim?
Gerçi her cron işlemi sonrası boş ise sileceği için pek sorun olacağını sanmıyorum ama eğer uzak sunucuya yeni bir dosya eklendiyse eklendiği yolu degisiklikler klasörüne oluşturuyor ama daha önceden bu dosya yedek sunucuda olmadığı için klasör içi boş oluyor. fakat timestamp ile oluşturulan klasörün içinde başka klasörler eklediği için bu klasör yolu silinemiyor.