Merhabalar, bir konu hakkında sizlere danışmak istiyorum. Linux (ubuntu) da bir sunucudan diğerine sürekli olarak veri aktarımı sağlamak için rsync komutunu crontab üzerinde çalıştırarak işlemin gerçekleşmesini sağladım ancak sorunum şu ;
A sunucundan B sunucusuna aktarılan verinin, B sunucusundan silindikten sonra, A sunucusundan tekrar aynı veri geldiği durumlarda o verinin gelmesini istemiyorum. Bunu nasıl yapılandırabilirim ?
Burada iki önemli husus var biricinsi B sunucusunda silinen veri A sunucusunda olmaya devam edecek mi? Ayrıca verinin silinme methodu kim tarafından nasıl yapılıyor?
B sunucusundan silinen veri A sunucusundan tekrar gönderilebiliyor bizim istediğimiz gönderilen veri silinmişse tekrar gönderilmesin. Diğer sorunuza gelirsek veriyi silme işlemini başka bir yazılım yapıyo ve ona müdahale edemiyoruz
Bunun için scrip yazıp crontab dan yine çalıştırabilirsin belki rysnc de bir parametre ile bu yapılabilir mi bakmak lazım help sayfasına ama yoksa en mantıklısı bir scrip ile yapılması…scrip içinde A dan gelen klasör ismi karşılaştırılabilir belki ama değişen datalar olursa o zaman tarih ile bakmak lazım.
Bu dosyayı rsync çalıştırılan sunucudan erişerek rsync komutunuza aşağıdaki parametreyi yazabilirsin.
rsync --exclude-from='exclude_list.txt'
Eğer B sunucusunda çalışan yazılıma hiç bir şekilde müdahale edemiyorsanız burada RSYNC doğru çözüm olmayacaktır. Çift yönlü bir senkronizasyon yapan yazılım düşünmelisiniz. Seneler önce benzer bir problemi Unison ile halletmiştim.
Buraya kadar herhangi bir sorun yaşamadım. Daha önce gönderilen dosyanın bir daha gitmemesi üzerine bir bash script oluşturdum ancak bu script i 2-3 dk aralıklarla çalışmasını istiyordum bash script bu konuda başarısız oldu. otomatik olarak hiçbir şekilde bu işlemi gerçekleştiremedim.
Bu sorunu da ptyhon ile çözdüm. python da script sorunsuz bir şekilde 2 dk da bir çalışıyor
import os
import time
kaynak_dizin = “notes/”
exclude_dosyasi = “exclude_list.txt”
while True:
dosyalar = os.listdir(kaynak_dizin)
with open(exclude_dosyasi, "w") as dosya:
for dosya_adi in dosyalar:
dosya.write(dosya_adi + "\n")
print("Script is running...")
time.sleep(120)