Daemon nədir?
Daemon — Unix, Linux və Unix-like əməliyyat sistemlərində arxa planda (background) işləyən, istifadəçi ilə birbaşa qarşılıqlı əlaqəyə girməyən, sistem və ya şəbəkə xidmətlərini təmin edən xüsusi proses növüdür. Daemon-lar sistem yükləndiyi anda başlayır və kompüter söndürülənə qədər davamlı işləyir. Adı "Disk And Execution MONitor" ifadəsindən və ya yunan mifologiyasındaki yardımçı ruhlardan (daimon) gəlir. Windows sistemlərində bu tip proseslər "service" (xidmət) adlanır.
Daemon nədir?
Daemon istifadəçi interfeysi olmayan, terminal və ya desktop-a bağlı olmayan, müstəqil olaraq işləyən sistem prosesidir. Daemon-lar əməliyyat sisteminin əsas funksionallığını təmin edir və müxtəlif sistem xidmətlərini idarə edir — şəbəkə əlaqələri, scheduled tasks, logging, hardware monitoring, print service və s.
Daemon-ların əsas xüsusiyyətləri:
Arxa planda işləmə: Daemon-ların öz terminal və ya GUI-si yoxdur. İstifadəçi onları görməz, lakin onlar davamlı işləyir.
Parent process: Daemon-lar adətən init process-in (PID 1, systemd və ya SysVinit) "övladı" olur. Daemon özünü parent process-dən ayırır (detach) və müstəqil işləyir.
Session leader: Daemon yeni session və process group yaradır və controlling terminal-dan ayrılır.
Davamlılıq: Sistem yükləndiyi andan söndürülənə qədər işləyir. Bəzi daemon-lar tələb olunan anda (on-demand) başlayır.
Root privileges: Çox daemon-lar system-level funksionallıq təmin etdiyindən root (superuser) hüquqları ilə işləyir.
Naming convention: Unix/Linux-da daemon-ların adı adətən "d" hərfi ilə bitir — sshd, httpd, systemd, cron daemon (crond), syslogd və s.
Daemon-ların tarixi
Daemon konsepsiyası 1960-cı illərin sonunda MIT-də Project MAC və CTSS (Compatible Time-Sharing System) zamanı yarandı. Termin ilk dəfə 1963-cü ildə istifadə olundu.
Unix dövrü (1970-ci illər): Unix əməliyyat sistemində daemon-lar əsas komponent oldu. Ken Thompson və Dennis Ritchie daemon konsepsiyasını inkişaf etdirdilər. İlk daemon-lardan biri printer spooler idi.
BSD Unix (1970-1980-ci illər): Berkeley Software Distribution (BSD) Unix-də daemon-lar standartlaşdı. Şəbəkə daemon-ları (inetd - internet super-server) yarandı.
Linux dövrü (1990-ci ildən indiyə qədər): Linux kernel-də (1991, Linus Torvalds) daemon konsepsiyası qorundu və inkişaf etdi. systemd (2010) müasir init və daemon manager-ə çevrildi.
Daemon-ların növləri
1. System Daemon-lar
Sistem səviyyəsində işləyən, əməliyyat sisteminin əsas funksiyalarını təmin edən daemon-lar.
init / systemd:
- PID 1, bütün digər proseslərin "valideyn"i
- System initialization, service management
- systemd müasir Linux-da dominant init system və daemon manager
syslogd / rsyslogd / journald:
- System logging daemon
- Kernel və proqramların log mesajlarını toplar və saxlayır
- /var/log/ qovluğunda log faylları
- journald systemd-nin logging xidmətidir
udevd:
- Device manager daemon
- Hardware device-ların dinamik aşkarlanması və konfiqurasiyası
- USB, disk, şəbəkə kartı qoşulduqda udevd uyğun driver-ləri yükləyir və device node yaradır (/dev/sda, /dev/usb0)
acpid:
- Advanced Configuration and Power Interface daemon
- Power management events (laptop qapağı bağlandıqda, batareya aşağı düşdükdə)
- Suspend, hibernate, shutdown funksiyaları
crond (cron daemon):
- Scheduled task execution
- Crontab fayllarına əsasən müəyyən vaxtda komandalar icra edir
- Backup, log rotation, system maintenance taskları
- Misal: Hər gecə saat 2:00-da backup script-i işlətmək
atd:
- "at" command daemon
- Bir dəfəlik scheduled tasks (cron-dan fərqli olaraq recurring deyil)
2. Network Daemon-lar
Şəbəkə xidmətlərini təmin edən daemon-lar.
sshd (SSH daemon):
- Secure Shell server
- Remote login və secure command execution
- Port 22-də listen edir
- SSH key authentication, encrypted connection
httpd / apache2 / nginx:
- Web server daemon
- HTTP/HTTPS requests xidmət edir
- Web site və application hosting
- apache2 və nginx ən populyar web server-lərdir
ftpd / vsftpd:
- FTP (File Transfer Protocol) server daemon
- File upload/download xidməti
- vsftpd (Very Secure FTP Daemon) təhlükəsiz FTP server
smbd / nmbd (Samba):
- SMB/CIFS protocol daemon
- Windows file sharing Linux-da
- Network printer sharing
named / bind:
- DNS (Domain Name System) server daemon
- Domain name resolution
- Authoritative və recursive DNS server
dhcpd:
- DHCP (Dynamic Host Configuration Protocol) server daemon
- Network-də automatic IP address assignment
ntpd / chronyd:
- Network Time Protocol daemon
- System clock synchronization
- Zaman serveri ilə sinxronizasiya
postfix / sendmail / exim:
- Mail Transfer Agent (MTA) daemon
- Email göndərmə və qəbul etmə
- SMTP server
3. Hardware və Device Daemon-lar
Hardware ilə əlaqəli xidmətlər.
cupsd:
- Common Unix Printing System daemon
- Print job management
- Printer discovery, driver management
- Web interface (localhost:631)
bluetoothd:
- Bluetooth device management
- Bluetooth pairing, connection
avahi-daemon:
- Zeroconf networking (mDNS/DNS-SD)
- Service discovery local network-də
- Printer, file share avtomatik aşkarlama
udisks2:
- Disk management daemon
- USB, external HDD auto-mounting
- Disk info, partition management
4. Desktop və User Daemon-lar
Desktop environment və istifadəçi səviyyəsində işləyən daemon-lar.
pulseaudio / pipewire:
- Audio server daemon
- Sound mixing, routing
- Müxtəlif audio source-ları idarə edir
NetworkManager:
- Network connection management
- Wi-Fi, Ethernet, VPN, mobile broadband
- GUI və CLI interface (nmcli, nmtui)
dbus-daemon:
- D-Bus message bus daemon
- Inter-process communication (IPC)
- Desktop application-lar arası mesaj mübadiləsi
gvfsd:
- GNOME Virtual File System daemon
- Remote file system access (SSH, FTP, SMB)
polkitd:
- PolicyKit daemon
- Privilege escalation və authorization
- İstifadəçi müvəqqəti admin hüququ tələb etdikdə (password dialog)
5. Database və Application Daemon-lar
Xüsusi tətbiqlər və database-lər üçün daemon-lar.
mysqld / mariadb:
- MySQL/MariaDB database server daemon
- SQL database xidməti
postgresql:
- PostgreSQL database server daemon
mongod:
- MongoDB NoSQL database daemon
redis-server:
- Redis in-memory data structure store daemon
- Cache, session storage, message broker
dockerd:
- Docker container runtime daemon
- Container yaratma, idarə, şəbəkə
containerd:
- Container runtime daemon (Docker və Kubernetes istifadə edir)
Daemon-ların işləmə prinsipi
Daemon yaradılması (Daemonization)
Bir proqramı daemon etmək üçün aşağıdakı addımlar icra olunur:
1. Fork: Parent process fork() system call ilə child process yaradır və sonra exit olur. Child process orphan olur və init tərəfindən adopt edilir.
2. Setsid: Child process setsid() ilə yeni session yaradır və session leader olur. Bu, controlling terminal-dan ayrılmağı təmin edir.
3. Fork yenə: Session leader yenidən fork edir və parent exit olur. Bu, daemon-ın terminal control etmə qabiliyyətini tamamilə aradan qaldırır.
4. Chdir: Working directory-ni root (/) və ya xüsusi qovluğa dəyişir. Bu, mounted file system-in unmount olunmasını maneə törətməsinin qarşısını alır.
5. Umask: File creation mask reset edir (umask(0)). Daemon-ın yaratdığı faylların icazələri düzgün olsun.
6. Close file descriptors: STDIN, STDOUT, STDERR və digər açıq file descriptor-lar bağlanır və ya /dev/null-a redirect olunur.
7. Signal handling: SIGHUP, SIGTERM kimi siqnallara handler təyin edilir. SIGHUP adətən konfiqurasiya reload üçün istifadə olunur.
8. PID file: Daemon öz PID-sini faylda saxlayır (/var/run/daemon.pid) ki, başqa instans başlatmasın və ya idarəetmə asan olsun.
Daemon lifecycle
Start: Init system (systemd) və ya manual olaraq başladılır.
Run: Arxa planda davamlı işləyir. Event-lərə reaksiya verir (network request, timer, signal).
Reload: SIGHUP siqnalı ilə konfiqurasiya yenidən yüklənir (restart olmadan).
Stop: SIGTERM və ya SIGKILL ilə dayandırılır. Graceful shutdown (məlumatı save edir, connection-ları bağlayır).
Restart: Stop + Start kombinasiyası.
systemd və daemon idarəetməsi
Müasir Linux distribusiyalarında systemd daemon-ları idarə edir.
systemd unit file: Hər daemon üçün .service faylı var (/etc/systemd/system/ və ya /lib/systemd/system/).
Nümunə: sshd.service
ini
[Unit]
Description=OpenSSH server daemon
After=network.target
[Service]
Type=notify
ExecStart=/usr/sbin/sshd -D
ExecReload=/bin/kill -HUP $MAINPID
KillMode=process
Restart=on-failure
[Install]
WantedBy=multi-user.target
systemctl komandaları:
bash
# Daemon-ı başlat
sudo systemctl start sshd
# Daemon-ı dayandır
sudo systemctl stop sshd
# Daemon-ı restart et
sudo systemctl restart sshd
# Konfiqurasiya reload (restart olmadan)
sudo systemctl reload sshd
# Daemon statusu
systemctl status sshd
# Daemon-ı boot-da auto-start et
sudo systemctl enable sshd
# Auto-start disable et
sudo systemctl disable sshd
# Bütün daemon-ların siyahısı
systemctl list-units --type=service
# Failed daemon-lar
systemctl --failed
journalctl - daemon log-ları:
bash
# sshd log-ları
journalctl -u sshd
# Real-time log (tail -f kimi)
journalctl -u sshd -f
# Son 100 sətir
journalctl -u sshd -n 100
# Bu gündən bəri
journalctl -u sshd --since today
SysVinit və daemon idarəetməsi (köhnə sistemlər)
Köhnə Linux distribusiyalarında SysVinit istifadə olunurdu.
/etc/init.d/ script-ləri: Hər daemon üçün shell script.
bash
# Daemon başlat
sudo /etc/init.d/ssh start
# Daemon dayandır
sudo /etc/init.d/ssh stop
# Restart
sudo /etc/init.d/ssh restart
# Status
sudo /etc/init.d/ssh status
# və ya service komutu
sudo service ssh start
Runlevel: 0 (halt), 1 (single-user), 2-5 (multi-user), 6 (reboot). Hər runlevel-də hansı daemon-ların işləməsi konfiqurasiya olunur.
Windows Service-ləri
Windows-da daemon-lara "service" deyilir və eyni prinsipdə işləyir.
Services.msc: Windows Service Manager GUI.
Service Control Manager (SCM): Windows-un service idarəetmə sistemi.
Komandalar:
cmd
# Service başlat
net start ServiceName
sc start ServiceName
# Service dayandır
net stop ServiceName
sc stop ServiceName
# Service statusu
sc query ServiceName
# Bütün service-lər
sc query type= service state= all
PowerShell:
powershell
Get-Service
Start-Service -Name "ServiceName"
Stop-Service -Name "ServiceName"
Restart-Service -Name "ServiceName"
Windows service nümunələri: Windows Update, Windows Defender, DHCP Client, DNS Client, Task Scheduler, Print Spooler, Windows Audio.
Daemon təhlükəsizliyi
Privilege separation: Daemon-lar minimal lazımi hüquqlarla işləməlidir. Root olaraq başlayıb sonra unprivileged user-ə switch etmək (privilege dropping).
Chroot jail: Daemon-ı məhdud file system-də işlətmək. Zərərli daemon digər sistemə giriş əldə edə bilməz.
SELinux / AppArmor: Mandatory access control. Daemon-ın yalnız lazımi file və resurslara girişi.
Firewall rules: Network daemon-ları yalnız lazımi portlardan əlçatan olmalıdır.
Regular updates: Daemon software-in son versiyası və security patch-lər.
Log monitoring: Daemon log-larında şübhəli aktivlik izləmək. fail2ban kimi vasitələr avtomatik block edə bilər.
Disable unused daemons: İstifadə olunmayan daemon-lar disable edilməlidir (attack surface azaltma).
Daemon troubleshooting
Daemon başlamır:
bash
# Status yoxla
systemctl status daemon-name
# Log-lara bax
journalctl -u daemon-name -n 50
# Config file syntax yoxla
daemon-name -t # (Apache: apachectl configtest)
# File permissions yoxla
ls -l /path/to/daemon/files
# Port conflict yoxla
sudo netstat -tulpn | grep :80
Daemon crash olur və restart olur:
bash
# Core dump yoxla
coredumpctl list
coredumpctl info PID
# Resource limit-lər yoxla
systemctl show daemon-name | grep Limit
# Memory və CPU istifadə
top, htop
Performance problem:
bash
# Daemon resource istifadəsi
ps aux | grep daemon-name
pidstat -p PID 1
# Strace - system call-ları izlə
sudo strace -p PID
# lsof - açıq file-lar
sudo lsof -p PID
Daemon-ların gələcəyi
Containerization: Docker və Kubernetes-də daemon-lar container-lərdə işləyir. systemd container-də də istifadə olunur.
Microservices: Monolithic daemon-lar əvəzinə kiçik, specialized service-lər. API əsaslı əlaqə.
Cloud-native: Cloud environment üçün optimallaşdırılmış daemon-lar. Stateless, scalable.
Security enhancement: Zero-trust architecture, least privilege, sandboxing.
Observability: Advanced monitoring, tracing, metrics. Prometheus, Grafana inteqrasiyası.
Nəticədə, daemon-lar Unix/Linux əməliyyat sistemlərinin əsas komponentidir və sistem xidmətlərini arxa planda təmin edir. Şəbəkə, log, hardware, database — hər sahədə daemon-lar vacib rol oynayır. systemd müasir daemon idarəetməsini sadələşdirib və gücləndirib. Daemon-ların düzgün konfiqurasiyası, təhlükəsizliyi və monitorinqi sistem administratorunun əsas vəzifəsidir. Windows-da service, Unix/Linux-da daemon — prinsip eynidir: arxa planda davamlı xidmət göstərən proseslər. Daemon-ların başa düşülməsi və idarə edilməsi server administrasiyası, DevOps və system engineering üçün fundamental bacarıqdır.