Daemon — operatsion tizim fonida uzoq vaqt ishlaydigan va foydalanuvchining doimiy interaktiv terminaliga bog‘lanmagan xizmat processi.
Daemon tarmoq so‘rovlarini qabul qilish, jadval bo‘yicha vazifa bajarish, log yozish, qurilmalarni boshqarish yoki boshqa processlarga xizmat ko‘rsatishi mumkin.
Unix va Linux tizimlarida daemon nomi ko‘pincha d harfi bilan tugaydi: sshd, httpd, systemd.
Fon processi
Oddiy terminal dasturi foydalanuvchi shelliga bog‘liq.
Terminal yopilsa, signal olishi va tugashi mumkin.
Daemon esa:
- terminaldan mustaqil;
- backgroundda;
- bootda avtomatik;
- log bilan;
- supervisor nazoratida
ishlaydi.
Klassik daemonization
Eski Unix usulida process daemon bo‘lish uchun:
fork()qiladi;- parent tugaydi;
- child
setsid()bilan yangi session yaratadi; - working directory o‘zgartiriladi;
- file mode mask sozlanadi;
- standard input/output yopiladi yoki logga yo‘naltiriladi;
- PID fayl yozilishi mumkin.
Double-fork terminalni qayta egallash xavfini kamaytirgan.
Zamonaviy service manager
Systemd kabi init tizimda daemonning o‘zi backgroundga fork qilishi shart emas.
Yaxshi yondashuv:
- process foregroundda qoladi;
- stdout va stderr log managerga boradi;
- systemd lifecycle’ni boshqaradi;
- PIDni o‘zi biladi;
- restart va limit qo‘llaydi.
Bu monitoringni soddalashtiradi.
Service unit
Systemd service unit daemon qanday ishga tushishini belgilaydi.
Asosiy qismlar:
ExecStart;- user;
- group;
- environment;
- working directory;
- restart policy;
- dependency;
- resource limit;
- security setting.
Daemon binary bilan service definition alohida.
Network daemon
Network daemon socket portda tinglaydi.
Misollar:
U bir vaqtning o‘zida ko‘p clientni thread, process yoki event loop orqali boshqaradi.
Unix socket daemon
Ba’zi xizmat faqat lokal Unix domain socket orqali ishlaydi.
Misollar:
Filesystem ruxsati qaysi user ulana olishini belgilaydi.
Worker modeli
Daemon ishni bir nechta usulda bajaradi.
- har connection uchun process;
- thread pool;
- prefork worker;
- async event loop;
- job queue;
- hybrid model.
Model workload va xavfsizlik talabiga bog‘liq.
PID fayl
Klassik daemon PIDni faylda saqlaydi.
Misol:
/run/example.pid
Management script shu PIDga signal yuboradi.
PID file eskirib qolsa, boshqa processga noto‘g‘ri signal berish xavfi mavjud. Service manager processni to‘g‘ridan-to‘g‘ri kuzatsa, PID file kerak bo‘lmasligi mumkin.
Signal
Daemon Unix signallariga javob beradi.
Keng tarqalgan ma’no:
SIGTERM— tartibli yopilish;SIGHUP— konfiguratsiyani qayta o‘qish;SIGUSR1— dasturga xos amal;SIGCHLD— child process tugadi;SIGKILL— majburiy to‘xtatish.
SIGKILLni process qayta ishlay olmaydi.
Graceful shutdown
Daemon yopilishda:
- yangi request qabul qilishni to‘xtatadi;
- mavjud ishlarni tugatadi;
- bufferlarni yozadi;
- socketni yopadi;
- lockni bo‘shatadi;
- state saqlaydi.
Timeoutdan oshsa supervisor majburan o‘ldirishi mumkin.
Reload
Ba’zi daemon to‘liq restart qilmasdan konfiguratsiyani qayta o‘qiydi.
Masalan, web server yangi workerlarni yangi config bilan ishga tushiradi, eski workerlar requestlarini tugatadi.
Barcha setting reload orqali o‘zgarmasligi mumkin.
Log
Daemon terminalga qarab qolmasligi uchun logni:
ga yuboradi.
Log rotation disk to‘lib qolishini oldini oladi.
Maxfiy token va parol logga yozilmaydi.
Privilege separation
Daemon port ochish yoki qurilma kirishi uchun root bilan boshlanishi mumkin, keyin kam huquqli userga o‘tadi.
Yoki systemd capability orqali faqat kerakli huquq beradi.
Bu komprometatsiya ta’sirini kamaytiradi.
Chroot va sandbox
Daemon filesystemning cheklangan qismida ishlashi mumkin.
Qo‘shimcha himoya:
- namespace;
- seccomp;
- AppArmor;
- SELinux;
- read-only path;
- private tmp;
- no-new-privileges.
Restart policy
Supervisor daemon xato bilan tugasa qayta ishga tushiradi.
Siyosat:
- har doim;
- faqat failure;
- ma’lum urinish;
- delay;
- exponential backoff.
Tez crash loop CPU va logni to‘ldirmasligi uchun rate limit qo‘yiladi.
Watchdog
Daemon ma’lum intervalda “tirikman” signali yuboradi.
Signal kelmasa, service manager uni qotgan deb hisoblab restart qiladi.
Process mavjud bo‘lishi uning foydali ish qilayotganini kafolatlamaydi.
Configuration
Daemon konfiguratsiyasi:
- file;
- environment;
- command-line;
- database;
- service discovery
orqali kelishi mumkin.
Config syntax ishga tushishdan oldin validation qilinadi.
Security update
Internetga ochiq daemonlar muntazam patch qilinadi.
Eski protocol, cipher va default credential o‘chiriladi.
Service faqat kerakli interface va portda tinglaydi.
Diagnostika
Daemon ishlamasa:
- process state;
- service manager status;
- exit code;
- log;
- config syntax;
- user permission;
- port;
- socket;
- dependency;
- environment;
- resource limit;
- SELinux
tekshiriladi.
Service “active” bo‘lsa ham health endpoint va funksional so‘rov sinovdan o‘tkaziladi.
Socket activation
Systemd socketni daemon ishga tushishidan oldin ochishi mumkin. Birinchi client so‘rovi kelganda service start qilinadi.
Afzalliklari:
- port erta tayyor;
- daemon restartida connection navbatda turishi;
- service faqat kerak bo‘lganda ishlashi;
- privilege bilan port ochishni manager bajarishi.
Daemon socket file descriptorni service managerdan qabul qiladi.
State va doimiy ma’lumot
Daemon ish holatini xotirada, runtime katalogda yoki database’da saqlashi mumkin. /run ichidagi fayllar rebootdan keyin yo‘qoladi, doimiy data esa /var/lib kabi joyda saqlanadi.
State format o‘zgarsa, yangi versiya migration bajaradi.
Bog‘liq tushunchalar
Process, Background service, Systemd, Init, PID, Signal, Socket, Supervisor, Journald, Graceful shutdown