Crontab hakkında yardım

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.

B sunucusunda silinen dosyaların bir listesini bir TXT dosyasında vb tutabilir misiniz? Eğer tutabilirseniz şu şekilde bir yöntem izleyebilirsiniz.

Örnek olarak b sunucusundan silinen dosyaların listesini oluşturuyoruz.

echo "deleted_file1.txt" >> exclude_list.txt
echo "deleted_file2.txt" >> exclude_list.txt

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.

Selamlar, RSYNC’de archive modu var, özetle
--archive, -a archive mode is -rlptgoD (no -A,-X,-U,-N,-H)
bir arada çalıştırıyor.
Örnek komut:

 rsync  -avz /source/ /dest/

Eğer dosyalar silinmiş ise taşımıyor, dilersen küçük bir test yapıp sonrasında rsync konfigurasyonunu düzenleyebilirsin.

1 Like

Sorunu çözdüm sizin fikirleriniz etkili oldu öncelikle çok teşekkür ediyorum.

echo “deleted_file.txt” >> exclude_list.txt bu komutu kullanarak dosyayı ekledim rsync ile crontab da

*/5 * * * * rsync -rv --exclude-from=exclude_list.txt notes/ destination@X.X.X.X:/root/backup > backup_log.txt 2>&1 bu komutu çalıştırdım.

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)  

Yardımlarınız için tekrar teşekkür ederim.

1 Like