---
title: "Worker öldü. Senkronizasyon ölmedi."
description: "Worker'ı toplu işlemin ortasında durdurun ve tek bir kişiyi izleyin: hangi imleç kaydedildi, yeniden oynatılan yazma neden iki kez gerçekleşmiyor, senkronizasyon yeniden başlarken kimin elinde. Ardından kurtarmanın işin yalnızca yarısı olduğunu gösteren iki olay."
url: https://tajo.io/tr/blog/worker-died-sync-didnt/
markdown: https://tajo.io/tr/blog/worker-died-sync-didnt.md
lang: tr-TR
author: "Set Noa"
author_url: https://tajo.io/tr/set-noa/
published: 2026-11-05
updated: 2026-11-05
alternates: {en-US: /blog/worker-died-sync-didnt.md, bg-BG: /bg/blog/worker-died-sync-didnt.md, cs-CZ: /cz/blog/worker-died-sync-didnt.md, de-DE: /de/blog/worker-died-sync-didnt.md, da-DK: /dk/blog/worker-died-sync-didnt.md, es-ES: /es/blog/worker-died-sync-didnt.md, fr-FR: /fr/blog/worker-died-sync-didnt.md, el-GR: /gr/blog/worker-died-sync-didnt.md, hi-IN: /hi/blog/worker-died-sync-didnt.md, id-ID: /in/blog/worker-died-sync-didnt.md, hr-HR: /hr/blog/worker-died-sync-didnt.md, hu-HU: /hu/blog/worker-died-sync-didnt.md, it-IT: /it/blog/worker-died-sync-didnt.md, ja-JP: /jp/blog/worker-died-sync-didnt.md, ko-KR: /kr/blog/worker-died-sync-didnt.md, ar-SA: /ar/blog/worker-died-sync-didnt.md, nl-NL: /nl/blog/worker-died-sync-didnt.md, no-NO: /no/blog/worker-died-sync-didnt.md, pl-PL: /pl/blog/worker-died-sync-didnt.md, pt-BR: /pt/blog/worker-died-sync-didnt.md, ro-RO: /ro/blog/worker-died-sync-didnt.md, ru-RU: /ru/blog/worker-died-sync-didnt.md, sv-SE: /se/blog/worker-died-sync-didnt.md, zh-CN: /zh-cn/blog/worker-died-sync-didnt.md, sl-SI: /sl/blog/worker-died-sync-didnt.md, sr-Latn-RS: /sr/blog/worker-died-sync-didnt.md, th-TH: /th/blog/worker-died-sync-didnt.md, ur-PK: /ur/blog/worker-died-sync-didnt.md, vi-VN: /vi/blog/worker-died-sync-didnt.md, sk-SK: /sk/blog/worker-died-sync-didnt.md}
---

[Veri Senkronizasyonu](https://tajo.io/tr/blog/?category=data-sync)

# Worker öldü. Senkronizasyon ölmedi.

Worker'ı toplu işlemin ortasında durdurun ve tek bir kişiyi izleyin: hangi imleç kaydedildi, yeniden oynatılan yazma neden iki kez gerçekleşmiyor, senkronizasyon yeniden başlarken kimin elinde. Ardından kurtarmanın işin yalnızca yarısı olduğunu gösteren iki olay.

senkronizasyon hatası kurtarma

Worker bir toplu işlemin ortasında öldüğünde çalışan senkronizasyona ne olur?

İmleç yalnızca temiz bir toplu işlemin sonunda ilerler; bu yüzden toplu işlemin ortasında durdurulan bir worker onu o toplu işlemin başında bırakır ve sonraki çalıştırma aynı sayfayı okur. Her kaydın teslim anahtarı sayfa imlecinden ve konumundan türetilir, tamamlanan yazmaların yedi günlük defteri de yeniden oynatmanın iki kez yazmasını engeller. Senkronizasyon başına tek bir kiralama (lease), iki çalıştırmanın aynı anda çalışmasını önler. Bu işin kolay yarısıydı. Bir senkronizasyon, onu duraklatan bir şey olmadan önce çalıştırma üstüne çalıştırma başarısız olmaya devam etti; bir çalışma alanı da hatalarla ve tek bir başarı olmadan sessizce bekledi, ta ki bir şey fark edene kadar. Artık art arda beş başarısızlıktan sonra duraklatan bir devre kesici ve başarı olmadan geçen yirmi dört saat için saatlik bir alarm var.

[Daha fazla bilgi](https://tajo.io/tr/blog/worker-died-sync-didnt/#tek-bir-ki%C5%9Fiyi-izleyin)

[AI Engineer tarafından 3 Ekim 2026’da yayımlanan bir konuşmada](https://www.youtube.com/watch?v=bRGyYaE0lxI&t=701s), Crusoe’dan bir geliştirici savunucusu (developer advocate) iki A100 düğümünde bir PyTorch eğitim işi başlattı. Ardından demonun kendi izleme sistemine bir GPU’nun XID 79 hatası verdiğini bildirdi. Düğüm devre dışı olarak işaretlendi ve iş iptal edildi. Süreç bir SIGTERM aldı ve “[kontrol noktalarınızı kaydetmek ya da loglarınızı boşaltmak için bu SIGTERM’i işlemeye iki dakikaya kadar](https://www.youtube.com/watch?v=bRGyYaE0lxI&t=633s)” süresi oldu. Yedek bir düğüm devreye girdi ve “[slurm işi yeniden başlayacak. Kontrol noktasını yükleyecek ve eğitime kaldığı yerden devam edecek](https://www.youtube.com/watch?v=bRGyYaE0lxI&t=769s)”. Baştan sona on beş dakikanın biraz altında. Kimse çağrılmadı.

Bir senkronizasyon, bir eğitim çalıştırmasından çok daha küçük bir hayvandır. Soru ise aynıdır. Worker’ı öldürmenin duplikasyonlara değil yalnızca birkaç dakikaya mal olması için bir çalıştırmanın neye ihtiyacı vardır?

Bu, [Tajo’nun kendi senkronizasyon çalıştırıcısı](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/) için yanıttır ve bir broşürden değil, koddan okunmuştur. [Reverse ETL](https://tajo.io/tr/blog/what-is-reverse-etl/) işin biçimini anlatır. Bu yazı ise iş öldüğünde ne olduğunu anlatır.

## Tek bir kişiyi izleyin

Bir çalıştırma kaynağı kaydedilmiş bir imleçten başlayarak sayfa sayfa okur. Sayfa imlecine `c3` diyelim, kişimiz de o sayfadaki 212. kayıt olsun. Herhangi bir şey yazılmadan önce bu kişi hakkında üç şey doğrudur.

Birincisi, bir teslim anahtarı vardır. Anahtar; senkronizasyonun kimliğinin, kaynağın, sayfa imlecinin, sayfadaki konumun ve kaydın kendisinin bir hash değeridir. İmleç ve kayıt hash’e girer ama anahtarın içine asla gömülmez; bu yüzden anahtar [hiçbir e-posta adresi](https://tajo.io/tr/resources/help/getting-started/understanding-data-sync/) taşımaz.

İkincisi, yazma doğrudan hedefe değil, bir [defterden](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#ledger) geçer. Hedef çağrılmadan önce anahtar beklemede olarak talep edilir. Yazma başarılı olduğunda satır tamamlandı olarak işaretlenir ve yedi gün saklanır.

Üçüncüsü, imleç ilerlememiştir. Yalnızca bir toplu işlemin sonunda, yalnızca o toplu işlemdeki her kayıt yerine ulaştıysa ve yalnızca çalıştırma senkronizasyonun hâlâ kendisinde olduğunu kanıtladıktan sonra ilerler.

Şimdi worker’ı yazma ile kontrol noktası arasında öldürün.

Bir SIGTERM geldiğinde her kuyruk worker’ı ortak tek bir on beş saniyelik süre sınırı içinde boşaltılır ve süreç, hâlâ çalışan ne olursa olsun yirmi beş saniye sonra kapanır; systemd ise öldürmeden önce ona kırk beş saniye tanır. Bu pencere içinde bitmeyen bir çalıştırma hâlâ sürüyor olarak işaretli kalır ve sonraki worker onu kuyruğun takılmış iş kurtarması aracılığıyla devralır. Sert bir sonlandırmada ise hiç boşaltma olmaz. Her iki durumda da aynı iki gerçek geçerlidir. Hedefte kişimiz vardır. [İmlecimiz](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#cursor) hâlâ `c3` der.

## Yeniden oynatma

Sonraki çalıştırma `c3`’ten başlar, aynı sayfayı okur, 212. kayıt için aynı anahtarı türetir ve deftere sorar. Defter tamamlandı der. Hedef çağrılmaz; saklanan sonuç yeniden oynatılır ve çalıştırma devam eder. Brevo’nun içe aktarma uç noktasının tüm sayfayı tek çağrıda aldığı toplu yolda da aynı kontrol, istek oluşturulmadan önce her anahtar için çalışır. Tüm anahtarları zaten tamamlanmış bir sayfa hiçbir şey göndermez.

Bütün hile budur ve neden işe yaradığını söylemeye değer. Anahtar, o sırada yürütülmekte olan çalıştırmadan değil, toplu işlemin başındaki sayfa imlecinden türetilir. Bir çökme, altmış saniye sonraki bir yeniden deneme ve yarın zamanlanmış bir çalıştırma aynı kayıt için [aynı anahtarı türetir](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#ledger). Defter, hangisinin sorduğuyla ilgilenmez.

Şimdi bedeli. [Defter yedi gün sonra unutur](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#ledger). Kodun kendi yorumu, yedi günün gecikmiş bir yeniden denemeyi ve kısa bir kesintiyi kapsadığını söyler; iddia ettiği de yalnızca budur. Bundan daha eski bir imleçten yapılan yeniden oynatma tekrar yazar. Sert biçimde kesintiye uğrayan bir çalıştırma da bekleyebilir. Ölü çalıştırmanın kiralaması on beş dakikaya kadar sürer ve zamanlanmış bir senkronizasyonda kiralaması boşta olan bir çalıştırma [ancak bir saatten uzun süre önce başlamışsa süpürülüp yeniden zamanlanır](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#stuck-runs). Crusoe’nun demosu [on beş dakikanın altında geri döner](https://www.youtube.com/watch?v=bRGyYaE0lxI&t=753s). Bizimki her zaman değil.

## Senkronizasyon yeniden başlarken kimin elinde

Bir senkronizasyon aynı anda tek bir çalıştırmaya aittir. Çalıştırma, Redis’te kendi belirteciyle, on beş dakikalık ömrü olan ve beş dakikada bir yenilenen bir [kiralama](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#lease) alır. Her kontrol noktasından önce bu kiralamayı hâlâ elinde tuttuğunu doğrular. Tutmuyorsa durur. Çalıştırma, [kişinin okuyacağı sade cümleyle](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#failures) kaydedilir: “The run lost its slot part-way through and stopped to avoid writing twice.” (Çalıştırma yarı yolda yerini kaybetti ve iki kez yazmamak için durdu.) Canlı bir sahiple çakışan ikinci bir çalıştırma yeniden denenmez. “Another run of this sync was already in progress” (Bu senkronizasyonun başka bir çalıştırması zaten sürüyordu) [mesajıyla sona erer](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#failures) ve sonraki zamanlanmış çalıştırma normal biçimde başlar.

Düzeltmenin kimde olduğu da yazılıdır. Her [hata kodu](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#failures), ne olduğunu anlatan bir cümleye, bundan sonra ne yapılacağını anlatan bir cümleye ve bir sahibe karşılık gelir: siz ya da Tajo. Eşleme yanlış olduğu için her kaydı reddeden bir hedef sizin sorumluluğunuzdadır. [Kaybedilen bir kiralama bizimdir](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#failures). Çalıştırmanın sayfası bir sonraki adımı gösterir; [senkronizasyon kurtarma rehberi](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#failures) hangisi olduğunu listeler.

Buraya kadarı işin kolay yarısıdır. Bir çökme tek bir yeniden oynatmaya mal olur ve hiçbir şey iki kez yazılmaz. Diğer yarısını iki olay öğretti.

## Başarısızlık üstüne başarısızlık

Bir senkronizasyon tekrar tekrar başarısız oldu. Sıkı bir döngüde değil: zamanlayıcı aralığı başına bir kez, çalıştırma üstüne çalıştırma, her seferinde aynı mesajla, yani özel bir kimliğin iki nokta üst üste içeremeyeceği mesajıyla. Çalıştırma hedefe hiç ulaşmadı. Kuyruğa alınırken, hiçbir çalıştırıcı onu görmeden öldü; bu yüzden çalıştırıcıya bağlı bir alarmın bağlanabileceği hiçbir şey olmadı.

Bu seriyi izleyen hiçbir şey yoktu. Bulgunun tamamı budur.

Çözüm bir devre kesicidir. Kaydedilen her başarısızlıktan sonra, senkronizasyonun son değiştirilmesinden bu yana biten son beş çalıştırmasını okur. Beşi de hataysa senkronizasyonu duraklatır, `circuit_breaker_tripped` nedeniyle tek bir denetim satırı yazar ve tek bir kritik alarm tetikler. Seri, worker’daki bir sayaçtan değil, saklanan çalıştırmalardan türetilir. Olaya neden olan kuyruğa alma hatası dahil, herhangi bir yoldan kaydedilen başarısızlık sayılır. Kodun yorumu, bu olayı beşinci çalıştırmada durduracağını söyler. Tek bir başarı seriyi sıfırlar. Duraklatmayı kaldırmak, devre kesiciyi eski satırlar yüzünden yeniden tetiklemek yerine onu yeniden kurar. [Shopify bağlayıcı kılavuzu](https://tajo.io/tr/docs/ecommerce-platforms/shopify/) aynı şeyi tek satırda söyler: art arda beş başarısız çalıştırmadan sonra senkronizasyon kendini duraklatır ve sayfası son hatayı gösterir.

Devre kesicinin yapmadığı şey, herhangi bir şeyi düzeltmektir. Crusoe düğümü değiştirir ve işi sormadan yeniden başlatır. Tajo durur ve sorar: duraklatılmış bir senkronizasyon, bir kişi nedeni düzeltip onu [yeniden yayımlayana](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#pause) kadar duraklatılmış kalır. Bu temkinli varsayılan bilinçlidir: müşteri kayıtlarına yazan bir senkronizasyonun otomatik olarak yeniden denenmesi, kendisi de bir yazmadır.

## Kimsenin görmediği sessizlik

İtiraz yerindedir ve şöyle gider: “Beş başarısızlıktan sonra duraklatan bir devre kesici ikinci olayı da yakalardı. Neden ikinci bir gözcü kurulsun?” Çünkü ikinci olay başarısızlık gibi görünmüyordu. Uzun bir süre boyunca bir çalışma alanında etkin bir senkronizasyon, giderek büyüyen bir hata satırı yığını ve hiç, tek bir başarı bile yoktu; hiçbir şey de alarm vermedi. Var olan her sinyal bir etkinliğe bağlıydı: bir çalıştırma başarısız oldu, bir webhook geldi, bir bütçe aşıldı. Sıfır başarı bir olay değildir. Bir olayın yokluğudur ve bir devre kesici yalnızca bir başarısızlık kaydedildiğinde çalışır. Ölmüş bir zamanlayıcı, kilitlenmiş bir kuyruk, hiç açılmayan bir worker: bunlar hiçbir şey kaydetmez ve bir devre kesici asla uyanmaz.

Bir lokomotifin ölü adam kolu tam tersi çalışır. Makinist onu basılı tutmaya devam etmek zorundadır ve sessizlik treni durdurur. Senkronizasyon sürümü [saatte bir](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#hourly-check), saati on üç geçe çalışır. Etkin senkronizasyonu olan her çalışma alanına tek bir soru sorar: son yirmi dört saatte herhangi bir çalıştırma başarılı oldu mu? En eski etkin senkronizasyonu bir günden kısa süre önce etkinleştirilmiş bir çalışma alanına dokunulmaz; henüz başarılı olmak için bir günü olmamıştır. Daha eski ve sessiz olan bir çalışma alanı tek bir kritik alarm alır. Alarm hangi sessizlik olduğunu söyler: çalıştırmalar kaydedilmiş ama hiçbiri başarılı değil ya da hiç çalıştırma kaydedilmemiş. Her olayda bir kez tetiklenir. Redis’teki bir işaretçi onu ilk başarılı çalıştırmaya kadar kapalı tutar, sonra temizlenir; böylece sonraki olay yeniden alarm verir.

İki gözcü de olaydan sonra tek bir commit ile geldi. Devre kesicinin yorumu, ilk olayı beşinci çalıştırmada durduracağını söyler. Ölü adam kontrolünün yorumu, uzun zaman önce etkinleştirilmiş ve sıfır çalıştırması olan bir senkronizasyonun alarm vermesi gerektiğini söyler. İkisi de ihtiyaç duyulduğunda yoktu. Onları sonradan yazdık; kimse nedenini unutmasın diye iki olay da dosya başlığına kaydedildi.

## Ne kuruldu, ne kurulmadı

Bu yazının yazıldığı tarih itibarıyla kurulu olanlar:

- İmleç her temiz toplu işlemin sonunda ve bir çökmede yeniden kaydedilir.
- Her kaydın teslim anahtarı sayfa imlecinden ve konumundan türetilir ve hedefe yapılan her çağrıdan önce [yedi günlük bir deftere](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#ledger) karşı kontrol edilir.
- Senkronizasyon başına on beş dakikalık ömrü olan tek bir [kiralama](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#lease).
- Çalıştırma başına altmış saniyeden başlayarak geri çekilen beş [deneme](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#retries).
- Art arda beş başarısızlıktan sonra senkronizasyonu duraklatan ve nedenini kaydeden bir [devre kesici](https://tajo.io/tr/resources/help/getting-started/understanding-data-sync/).
- Başarı olmadan geçen yirmi dört saat için [saatlik bir alarm](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#hourly-check).

Kurulmayanlar ve buna güvenmeden önce bilmeye değer olanlar:

- Ölü adam kontrolü senkronizasyonu değil, çalışma alanını izler. Sağlıklı tek bir senkronizasyon, aynı çalışma alanındaki sessiz bir kardeşini gizler.
- Alarmı [Tajo’nun operatörlerine ulaşır](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#hourly-check): her zaman bir log satırı, yapılandırıldığı yerde ise Sentry, bir webhook ya da bir e-posta. Senkronizasyonun sayfasında görünmez. Devre kesicinin duraklatması ise görünür.
- Duraklatılmış bir senkronizasyonu hiçbir şey yeniden başlatmaz. Bunu bir kişi yapar.
- Sert bir sonlandırmadan sonra kurtarma hızlı değildir. Kiralama on beş dakika sürebilir ve [süpürme bir saat bekler](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#stuck-runs).
- İki eşik de, yani beş başarısızlık ve yirmi dört saat, [dağıtım ayarlarıdır](https://tajo.io/tr/resources/help/troubleshooting/recover-a-stuck-or-failed-sync/#limits). Bunları senkronizasyon başına ayarlayamazsınız.

[Neredeyse kusursuz adımlardan oluşan uzun bir zincir yine de başarısız olur](https://tajo.io/tr/blog/almost-perfect-steps-unreliable-chain/); çıkış yolu son durumu tanımlamak ve onu kontrol etmektir. Bu yazı bunun operasyonel yarısıdır. Ölü bir çalıştırmanın geride ne bıraktığını tanımlayın ve sessizliğin geride bıraktığı hiçliği kontrol edin.

Crusoe’nun kapanış cümlesi “[başarısızlıklar kaçınılmazdır](https://www.youtube.com/watch?v=bRGyYaE0lxI&t=955s)” oldu. Bizimki bir adım ötede. Çökme kolay yarıydı, çünkü geride satırlar bıraktı. Sessizlik ise aramaya çıkmamız gereken yarıydı.

## Sık Sorulan Sorular

**Worker bir toplu işlemin ortasında öldüğünde çalışan senkronizasyona ne olur?**

İmleç hâlâ yarıda kalan toplu işlemin başını gösterir, çünkü Tajo onu yalnızca bir toplu işlem temiz biçimde tamamlandıktan sonra ilerletir. Sonraki çalıştırma aynı sayfayı yeniden okur. Her kayıt, sayfa imlecinden ve kaydın konumundan türetilen bir teslim anahtarı taşır; bir defter de tamamlanan her yazmayı yedi gün saklar. Böylece zaten yazılmış kayıtlar hedefe ikinci kez gönderilmez, sonuçları defterden yeniden oynatılır.

**Yeniden oynatılan bir senkronizasyon aynı kişiyi neden iki kez yazmaz?**

Çalıştırma, hedefe yapılan her çağrıdan önce kaydın teslim anahtarını bir deftere karşı kontrol eder. Anahtar; senkronizasyonun, kaynağın, sayfa imlecinin, sayfadaki konumun ve kaydın kendisinin bir hash değeridir. Bu yüzden bir çökme, bir dakika sonraki yeniden deneme ve ertesi günkü zamanlanmış çalıştırma aynı kayıt için aynı anahtarı türetir. Yedi günlük pencere içinde tamamlandı olarak işaretlenmiş bir anahtar yeniden gönderilmez.

**Bir senkronizasyon için ölü adam alarmı nedir?**

Başarısızlık üzerine değil, yokluk üzerine tetiklenen bir kontroldür. Tajo saatte bir, etkin senkronizasyonu olan her çalışma alanına bakar ve son yirmi dört saatte hiçbir çalıştırma başarılı olmadıysa alarm verir; hiç çalıştırma kaydedilmemiş olması da buna dahildir. Her olayda bir kez tetiklenir ve ilk başarılı çalıştırmadan sonra yeniden kurulur. Var olmasının nedeni, bir hata alarmının yalnızca kaydedilmiş hataları görebilmesidir.

## İlgili makaleler

### [Kimse izlemezken çalışan bir senkronizasyon için altı kural](https://tajo.io/tr/blog/six-rules-unattended-sync/)

6 Kas 2026 · 7 dk okuma

7 bölüm

### [Kutuların arasındaki iş akışı](https://tajo.io/tr/blog/the-workflow-between-the-boxes/)

8 Eki 2026 · 3 dk okuma

Mağaza kaydı → Operatör düzeltmesi → E-posta hedefi

### [Brevo entegrasyonları: doğrulanabilir bağlantıyı seçin](https://tajo.io/tr/blog/brevo-connector-guide/)

19 Ağu 2026 · 4 dk okuma

6 bölüm
