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ı
- Apache (httpd): Web sitelerinizi sunar
- Nginx: Hızlı web sunucusu ve proxy
- Tomcat: Java uygulamaları için
Ağ Servisleri
- SSH daemon (sshd): Uzaktan bağlantı sağlar
- DNS daemon: Domain isimlerini IP adreslerine çevirir
- DHCP daemon: IP adresleri dağıtır
Sistem Servisleri
- Cron daemon (crond): Zamanlanmış görevleri çalıştırır
- Log daemon (syslogd): Sistem loglarını toplar
- Print daemon: Yazıcı işlerini yönetir
Daemon Özellikleri
Bir programın daemon olabilmesi için bazı özellikler taşıması gerekir:
- Arka planda çalışır: Terminal’e bağlı değildir
- Parent process’i yoktur: Doğrudan sistem tarafından yönetilir
- Session leader’dır: Kendi session’ını oluşturur
- Sürekli aktiftir: Sistem kapanana kadar çalışır
- Log’lar yazar: Genellikle
/var/log/altına
Daemon İsimlendirmesi
Daemon’ların isimlendirilmesinde bir gelenek vardır - çoğunun sonunda ‘d’ harfi bulunur:
httpd→ HTTP daemonsshd→ SSH daemonmysqld→ MySQL daemonftpd→ FTP daemon
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:
- Daemon: Arka planda çalışan programın kendisi
- Service: Daemon tarafından sağlanan hizmet
Örneğin httpd daemon’u, HTTP service’ini sağlar.
Popüler Daemon’lar
İşte sisteminizdeki bazı önemli daemon’lar:
Web ve Database
apache2/httpd- Web sunucusunginx- Web sunucusu/proxymysqld- MySQL veritabanıpostgresql- PostgreSQL veritabanı
Ağ ve Güvenlik
sshd- SSH bağlantılarıfirewalld- Güvenlik duvarıNetworkManager- Ağ yönetimi
Sistem
systemd- Sistem ve servis yöneticisicron- Zamanlanmış görevlerrsyslog- Log yönetimi
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! 🚀