Skip to content

Daemon Nedir? Arka Planda Çalışan Güçlü Yardımcılar

Published: at 10:00 PMSuggest an edit

Merhaba! Bugün biraz teknik ama çok önemli bir konuya değineceğiz: Daemon’lar. Eğer Linux veya Unix sistemlerle çalışıyorsanız, muhtemelen daemon’larla tanışmışsınızdır bile - sadece fark etmemiş olabilirsiniz.

Daemon Nedir?

Daemon (telaffuz: “day-mon”), arka planda çalışan sistem programlarına verilen isimdir. Bu programlar genellikle sistem başladığında otomatik olarak çalışmaya başlar ve sürekli aktif kalırlar.

Adı “demon” (şeytan) kelimesinden gelir ama korkmayın! Bu isim sadece onların “görünmez” olduklarını ve arka planda çalıştıklarını vurgulamak için verilmiş. Maxwell’in Daemon’u gibi mitolojik bir referans aslında.

Daemon’lar Ne İş Yapar?

Daemon’lar sisteminizde bir sürü önemli görevi yerine getirir:

Web Sunucuları

Ağ Servisleri

Sistem Servisleri

Daemon Özellikleri

Bir programın daemon olabilmesi için bazı özellikler taşıması gerekir:

  1. Arka planda çalışır: Terminal’e bağlı değildir
  2. Parent process’i yoktur: Doğrudan sistem tarafından yönetilir
  3. Session leader’dır: Kendi session’ını oluşturur
  4. Sürekli aktiftir: Sistem kapanana kadar çalışır
  5. Log’lar yazar: Genellikle /var/log/ altına

Daemon İsimlendirmesi

Daemon’ların isimlendirilmesinde bir gelenek vardır - çoğunun sonunda ‘d’ harfi bulunur:

Bu ‘d’ harfi “daemon” kelimesinden gelir ve bu programların arka plan servisi olduğunu gösterir.

Daemon’ları Nasıl Yönetiyoruz?

Systemd ile (Günümüz Linux’larda)

# Servis durumunu kontrol et
sudo systemctl status nginx

# Servisi başlat
sudo systemctl start nginx

# Servisi durdur
sudo systemctl stop nginx

# Servisin otomatik başlamasını sağla
sudo systemctl enable nginx

# Servisin otomatik başlamasını engelle
sudo systemctl disable nginx

Init.d ile (Eski sistemlerde)

# Servis durumunu kontrol et
sudo service nginx status

# Servisi başlat
sudo service nginx start

# Servisi durdur
sudo service nginx stop

# Servisi yeniden başlat
sudo service nginx restart

Kendi Daemon’umuzu Yazalım

İşte basit bir Python daemon örneği:

#!/usr/bin/env python3
import os
import sys
import time
import signal

class SimpleDaemon:
    def __init__(self, pidfile):
        self.pidfile = pidfile

    def daemonize(self):
        # İlk fork
        try:
            pid = os.fork()
            if pid > 0:
                sys.exit(0)  # Parent process çık
        except OSError as e:
            sys.stderr.write(f"Fork #1 failed: {e}")
            sys.exit(1)

        # Yeni session oluştur
        os.setsid()

        # İkinci fork
        try:
            pid = os.fork()
            if pid > 0:
                sys.exit(0)  # İkinci parent process çık
        except OSError as e:
            sys.stderr.write(f"Fork #2 failed: {e}")
            sys.exit(1)

        # Working directory'yi değiştir
        os.chdir("/")

        # File descriptors'ları kapat
        os.umask(0)

        # Standard input/output'ları yönlendir
        sys.stdout.flush()
        sys.stderr.flush()

        with open('/dev/null', 'r') as dev_null:
            os.dup2(dev_null.fileno(), sys.stdin.fileno())

        with open('/dev/null', 'w') as dev_null:
            os.dup2(dev_null.fileno(), sys.stdout.fileno())
            os.dup2(dev_null.fileno(), sys.stderr.fileno())

        # PID dosyasını yaz
        with open(self.pidfile, 'w') as f:
            f.write(str(os.getpid()))

    def run(self):
        # Daemon'ın asıl işi burada yapılır
        while True:
            # Log dosyasına mesaj yaz
            with open('/var/log/mydaemon.log', 'a') as f:
                f.write(f"Daemon çalışıyor: {time.ctime()}\n")
            time.sleep(60)  # 1 dakika bekle

if __name__ == "__main__":
    daemon = SimpleDaemon('/var/run/mydaemon.pid')
    daemon.daemonize()
    daemon.run()

Daemon ve Service Arasındaki Fark

Bu terimleri sık karıştırırız:

Örneğin httpd daemon’u, HTTP service’ini sağlar.

Popüler Daemon’lar

İşte sisteminizdeki bazı önemli daemon’lar:

Web ve Database

Ağ ve Güvenlik

Sistem

Daemon’ları İzlemek

Hangi daemon’ların çalıştığını görmek için:

# Tüm servisleri listele
systemctl list-units --type=service

# Aktif daemon'ları göster
ps aux | grep -E '\[.*\]$'

# Belirli bir daemon'u ara
pgrep -f nginx

Son Sözler

Daemon’lar günümüz bilgisayar sistemlerinin olmazsa olmazlarıdır. Onlar sayesinde sistemimiz sürekli çalışır, web siteleri erişilebilir kalır ve zamanlanmış görevler otomatik olarak yapılır.

Bu sessiz kahramanlar olmasa, her şeyi manuel olarak yapmamız gerekecekti. İyi ki varlar!

Kendi daemon’unuzu yazmak istiyorsanız, yukarıdaki örneği başlangıç noktası olarak kullanabilirsiniz. Sadece güvenlik ve performans konularını unutmayın.

Daemon’lar hakkında daha fazla merak ettiğiniz varsa, man daemon komutunu çalıştırabilirsiniz. Happy coding! 🚀



Previous Post
Makefile: Build Otomasyonunun Klasik Ustası
Next Post
MySQL ONLY_FULL_GROUP_BY Hatası: Hızlı Çözüm