DevOps Foundations · Modül 1: Linux çalışma modeli
Süreçler, Sinyaller ve Servisler
Servis; gözetmeni, kullanıcısı ve nasıl duracağına dair sözleşmesi olan süreçtir. Bu ders PID, sinyal ve birimleri birbirine bağlar; yeniden başlatma temenniden prosedüre dönüşür.
11 dk okuma
Kazanımlar
- Çalışan servisi PID'den komut satırına, sahibine ve açık portlarına kadar izlemek
- Durdurma, yeniden yükleme ve teşhis için doğru sinyali seçmek, -9'a sarılmamak
- Bir systemd birimini okuyup başlatma, çökme ve yeniden açılışta ne olacağını tahmin etmek
- kill -9'un neden son çare olduğunu ve neyi yok ettiğini açıklamak
Neden önemli
"Bir yeniden başlat" çoğu olayı çözer ve hiçbir şey öğretmez. Önemli olan ikinci yeniden başlatmadır: servis sabah 3'te yine ölür, çünkü ilk yeniden başlatma sürecin neden çıktığını, durumunu boşaltıp boşaltmadığını veya gözetmenin onu geri getirip getirmeyeceğini hiç sormamıştır. Süreç okuryazarlığı yeniden başlatmayı refleksten, son durumu bilinen prosedüre çevirir.
Kavramlar
Süreç; bilinmeye değer dört olgusu olan çalışan programdır: PID'si, ebeveyni (PPID), hangi kullanıcı olarak çalıştığı ve o anki durumu. ps aux dördünü ve tam komut satırını gösterir; /proc/<pid>/ aynı olguları dosya olarak sunar, bu yüzden 1. ders burada da geçerlidir. Yetim süreçler PID 1 tarafından evlat edinilir; zombiler çıkış durumunu ebeveyni toplamamış ölü süreçlerdir: bir PID yuvası dışında hiçbir şey tüketmezler ve öldürülemezler, çünkü öldürülecek bir şey kalmamıştır.
Sinyaller süreçlerle konuşma dilidir. Sayı önemli değildir; sözleşme önemlidir. SIGTERM (15) süreçten durmasını ister ve temizliğe izin verir: tamponları boşaltır, bağlantıları kapatır, kaydı siler. SIGHUP (1) gelenek olarak arka plan programından işi düşürmeden konfigürasyonu yeniden yüklemesini ister. SIGKILL (9) sürece hiç iletilmez; çekirdek onu anında yok eder, yani temizlik yok, boşaltma yok ve yarım yazılmış dosya ihtimali gerçektir. Argümansız kill SIGTERM gönderir ve doğru varsayılan budur. Onu aşmak yazılı gerekçe ister.
systemd süreci servise çevirir: birim dosyası neyin, kim olarak, hangi ortamla çalışacağını ve çökünce ne olacağını bildirir. Birimi üç parçada oku. [Unit] bağımlılıkları adlandırır (ağdan sonra başlat beni). [Service] komutu, kullanıcıyı, yeniden başlatma politikasını ve ortamı adlandırır; EnvironmentFile satırları açılış arızalarının klasik saklanma yeridir. [Install] servisin açılışta başlayıp başlamayacağına karar verir. Gecikmeli Restart=on-failure ve RestartSec, kendini iyileştiren servisle bağımlılığı saniyede beş kez döven çöküş döngüsünün farkıdır.
Uygulamalı örnek
Servis ayakta ama yanıt vermiyor; panel yeniden başlatmayı öneriyor. Bilinçli sıra:
$ ps -o pid,ppid,user,stat,cmd -p $(pgrep -f svc-app) PID PPID USER STAT CMD 4182 1 svc-app Ssl /usr/bin/svc-app --config /srv/app/config.yaml $ kill 4182 $ sleep 3; ps -p 4182 PID TTY TIME CMD $ systemctl is-active svc-app active
Beklenen okuma: süreç servis kullanıcısına aitti, normal uyuyordu (S), ebeveyni birim üzerinden PID 1 idi; SIGTERM üç saniyede çıkış verdi ve gözetmen taze süreci başlattı. PID SIGTERM'den sağ çıkarsa kanıtla yükselt: durum sütununa bak (D kesintisiz G/Ç bekleyişi demektir, SIGKILL bile bekler), yığını ya da en azından son log satırlarını al, sonra bir kez SIGKILL gönder ve TERM'in neden yetmediğini kaydet. Olay kaydında önce TERM, bekleme ve KILL gerekçesi görünmelidir.
Yaygın yanlış hamle
İlk refleks olarak kill -9: teşhisin ihtiyaç duyduğu kanıtı tam olarak yok eder; tamponlu loglar boşalmaz, geçici dosyalar kalır, kilit dosyaları artık var olmayan bir sahibi gösterir, yerine gelen süreç açılmayı reddeder ve olay ikiye katlanır. Veritabanına veya kuyruk tüketicisine uygulanan aynı refleks, günler sonra iz bırakmadan yozlaşma olarak yüzeye çıkan yarım yazımlar riski taşır. -9'a cam arkasındaki yangın baltası gibi davran: mevcuttur, kullanımı belgelenir ve asla günlük alet değildir.
Lab ve sonraki adım
L02 labı, birim üzerinden teşhis edilen yanlış ortam değişkeni ve yanlış servis tanımı kaynaklı açılış arızasını canlandırır; yeniden başlatmadan önce teşhis vardır. Sırada 3. ders: makinenin neleri tükettiği: disk, inode ve bellek.
Mini kontrol
4 soruluk isteğe bağlı öz kontrol. Yanıtlar cihazından çıkmaz, saklanmaz ve hiçbir değerlendirmeye sayılmaz.
Ders geri bildirimi
Henüz yayında geri bildirim yok.
Geri bildirim yazmak için giriş yap ve dersi tamamla.
Kaynaklar
Alıştırma
Çalıştırdığın herhangi bir servis için tek sayfalık yeniden başlatma prosedürü yaz: tam ps kontrolü, TERM komutu, kaç saniye bekleneceği, sağ çıkarsa ne okunacağı ve KILL'e yükseltmenin tek koşulu. Zararsız bir süreçte bir kez dene (ör. arka planda sleep 600).
Geçme kriterleri
Prosedürde PID kontrolü, TERM komutu, somut bekleme süresi, yükseltme öncesi okunacak kanıt ve tek açık KILL koşulu var; denemede PID'in TERM sonrası gittiği görünüyor.