Bosh sahifa Wiki Daemon

Daemon

Daemonoperatsion 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:

  1. fork() qiladi;
  2. parent tugaydi;
  3. child setsid() bilan yangi session yaratadi;
  4. working directory o‘zgartiriladi;
  5. file mode mask sozlanadi;
  6. standard input/output yopiladi yoki logga yo‘naltiriladi;
  7. 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:

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.

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:

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:

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