K01 — Çözüm#
Önce kendin dene. Aşağıda önce teşhis akışı var; kök sebep sonra. B3'ün amacı: bir arızayı kanıtla, tahmin etme.
Teşhis akışı (üç komutla daralt)#
-
Başlamadı mı, öldü mü?
activating/faileddöngüsü → başlıyor ama hemen ölüyor. Sorun app'in çalışma zamanında. -
Neden öldü?
OSError: [Errno 98] Address already in use→ port alınamıyor. -
Portu kim tutuyor?
8080'ipython -m http.server(yanik01-decoy) tutuyor — senin uygulaman değil.
Bu üç komut belirtiyi (yanıt yok) kök sebebe (port çakışması) kanıtla bağladı.
Kök sebep#
k01-decoy servisi 8080'i önce kapıyor. k01-app aynı porta bağlanamayınca Restart=on-failure yüzünden sürekli deneyip başarısız oluyor. curl :8080/health ya decoy'dan 404 alıyor ya da hiç ok görmüyor.
Düzeltme#
Belirtinin gittiğini kanıtla (sadece "düzelttim" deme)#
systemctl is-active k01-app # active
ss -tlnp | grep ':8080' # k01-app dinliyor
curl -s http://127.0.0.1:8080/health # ok
Niye böyle oluyor#
Bir port aynı adres+port çiftinde tek bir dinleyiciyi kabul eder. İki servis aynı portu isterse ikincisi EADDRINUSE alır. Gerçek hayatta bu; eski bir process'in ölmemesi, iki farklı uygulamanın çakışması ya da yanlış yapılandırma yüzünden olur.
Ders#
"Yanıt vermiyor" belirtisi, servisin ayakta sanılıp aslında bağlanamadığı bir durumu gizleyebilir. status → journalctl → ss üçlüsü, "ne bozuk" sorusunu dakikada daraltır. Önce kanıt, sonra düzeltme.