init va systemd
Boot jarayoni va GRUB maqolasida ko'rganimizdek, kernel ishga tushib, haqiqiy root fayl tizimini mount qilgach, boshqaruvni birinchi user-space jarayoniga — jarayon identifikatori 1 bo'lgan jarayonga topshiradi. Tizimga kerak bo'lgan qolgan hamma narsani — xizmatlarni, tarmoqni, login so'rovini — ishga tushirish aynan shu bitta jarayonning zimmasida. Linux tarixida bu jarayonning o'zi va xatti-harakati bir marta tubdan o'zgargan: eski init modelidan bugungi systemd ga o'tilgan. Bu o'zgarishni va nega systemd deyarli har bir zamonaviy distributivda sukut bo'yicha tanlovga aylanganini tushunish keyingi maqolalarda ko'riladigan unit, target va xizmatlarni boshqarish mexanizmlari nega aynan shunday qurilganini tushuntirib beradi.
Nimalarni o'rganasiz
Bu maqola oxirida siz quyidagilarni qila olasiz:
- PID 1 nimaga javobgar ekanini va nega unga alohida e’tibor kerakligini tushuntirish;
- SysV init va uning runlevel modeli qanday ishlaganini tasvirlash;
- systemd nega SysV init o'rnini sukut bo'yicha egallaganining asosiy sabablarini sanab berish;
systemctlbuyrug'ining umumiy ko'rinishini va uning boshqa systemd vositalari bilan aloqasini tanib olish;- muayyan mashinada aslida qaysi init tizimi ishlayotganini tekshirish.
PID 1: tizimning ildiz jarayoni
Linux’dagi har bir jarayon boshqa jarayon tomonidan yaratiladi (fork qilinadi) — faqat bittasidan tashqari: PID 1. Uni boot ketma-ketligining oxirgi qadami sifatida to'g'ridan-to'g'ri kernel ishga tushiradi.
PID 1 ning ikkita alohida vazifasi bor:
- tizimni ishga tushirish — xizmatlar, mount nuqtalari va boshqa resurslarni to'g'ri tartibda ko'tarish;
- reaping — ota-jarayoni allaqachon tugagan, lekin hali tizimdan to'liq olib tashlanmagan "yetim" jarayonlarni tozalash.
Agar PID 1 ning o'zi ishdan chiqsa, kernel kernel panic bilan butun tizimni to'xtatadi — aynan shu sababli bu jarayon oddiy dasturga qaraganda ancha ehtiyotkorlik bilan yoziladi.
Intervyuda
"Reaping" ni aniq tushuntira olish muhim, chunki u zombie jarayon savoli sifatida chiqadi. Jarayon tugaganda ota-jarayon uning chiqish holatini wait() bilan o'qimaguncha u jarayonlar jadvalida zombie sifatida qoladi. Agar ota-jarayon birinchi bo'lib o'lsa, bola yetim (orphan) bo'lib qoladi va PID 1 ga qayta biriktiriladi — shundan keyin unga wait() qilib, zombie’ni tozalash PID 1 ning vazifasi. Aynan shu sababli konteyner ichida PID 1 noto'g'ri tanlansa (hech qachon reaping qilmaydigan shell yoki ilova), zombie’lar to'planib boradi. Standart yechim — docker run --init yoki tini kabi init’ni tushunadigan entrypoint, ya’ni faqat PID 1 ning reaping ishini bajarish uchun mavjud bo'lgan kichik dastur.
SysV init va runlevel modeli
systemd keng tarqalishidan oldin — va bugun ham ayrim eski yoki maxsus tizimlarda — PID 1 vazifasini SysV init bajargan. Uning modeli runlevellar atrofida qurilgan edi: tizim nima qilayotganini tasvirlaydigan 0 dan 6 gacha raqamlangan holatlar.
| Runlevel | Ma’nosi |
|---|---|
| 0 | Tizimni to'xtatish |
| 1 | Bitta foydalanuvchi rejimi (tiklash uchun) |
| 2–5 | Oddiy ko'p foydalanuvchili rejimlar, ma’nosi distributivga qarab farq qiladi |
| 6 | Qayta yuklash |
Runlevel’lar o'rtasidagi o'tishlar va sukut bo'yicha runlevel /etc/inittab da sozlanardi, xizmatlar esa /etc/init.d/ ostidagi skriptlar orqali birin-ketin, ketma-ket ishga tushirilar yoki to'xtatilardi. Bu modelning bir nechta tuzilmaviy zaif tomonlari bor edi:
- xizmatlar ketma-ket ishga tushgani uchun boot vaqti xizmatlar soniga deyarli chiziqli ravishda o'sib borardi;
- xizmatlar o'rtasidagi bog'liqliklar skriptlardagi nomlash qoidalari (
S20network) orqali norasmiy ifodalanardi, bu esa qattiq va xatoga moyil edi; - ishga tushirilgan xizmat haqiqatan tayyor yoki ishlayotganini tekshirishning standart usuli yo'q edi — faqat uning ishga tushirish skripti bajarilganini bilish mumkin edi.
Nega systemd sukut bo'yicha tanlovga aylandi
systemd — dastlab Red Hat muhandisi Lennart Poettering tomonidan ishlab chiqilgan, PID 1 rolini o'z zimmasiga olish uchun yaratilgan zamonaviy init va xizmatlar menejeri. U SysV init cheklovlarini to'g'ridan-to'g'ri hal qiladi:
- parallel ishga tushirish — bir-biriga bog'liq bo'lmagan xizmatlar bir vaqtda ishga tushadi va bu boot vaqtini sezilarli qisqartiradi;
- deklarativ bog'liqliklar — har bir xizmat boshqa unit’lar bilan munosabatini (
After=,Requires=,Wants=) o'zining.servicefaylida e’lon qiladi, systemd esa to'g'ri tartibni shu bog'liqliklar grafidan o'zi hisoblab chiqadi; - socket va D-Bus orqali faollashtirish — xizmat talab bo'yicha, faqat birinchi so'rov kelganda ishga tushishi mumkin, bu resurslarni tejaydi;
- bitta izchil vositalar oilasi — xizmatlarni boshqarish (
systemctl), log'larni o'qish (journalctl), vaqt va locale’ni sozlash (timedatectl,localectl) bitta izchil buyruqlar oilasi orqali bajariladi; - cgroups orqali izolyatsiya — har bir xizmat o'zining control group’ida ishlaydi, bu resurslarni hisobga olish va jarayonlarni to'liq tozalashni ancha ishonchli qiladi.
systemd’da runlevel tushunchasining o'zi targetlar bilan almashtirilgan — ular systemd unitlari va targetlari maqolasida batafsil ko'rib chiqiladi.
Info
systemd yagona muqobil emas — Upstart (oldingi Ubuntu relizlarida ishlatilgan) va OpenRC (Alpine, Gentoo) hali ham ishlatiladigan boshqa init tizimlari. Lekin Ubuntu Server, Debian, RHEL/CentOS/Rocky oilasi, Fedora va boshqa zamonaviy distributivlarning aksariyati hozir sukut bo'yicha systemd dan foydalanadi, shuning uchun bu kurs aynan unga qaratilgan.
Qaysi init tizimi ishlayotganini tekshirish
Yoki systemd versiyasini to'g'ridan-to'g'ri tekshiring:
Agar natija systemd bo'lmasa — masalan, init yoki boshqa narsa bo'lsa — tizim SysV init yoki boshqa muqobilda ishlayapti va keyingi maqolalardagi systemctl/journalctl buyruqlari to'g'ridan-to'g'ri qo'llanmaydi.
systemd buyruqlar oilasiga qisqacha nazar
systemd har biri o'z sohasi uchun javobgar bo'lgan bir nechta alohida buyruq bilan birga keladi:
| Buyruq | Vazifasi |
|---|---|
systemctl |
Unit’larni (xizmatlar, targetlar va boshqalar) boshqarish — ishga tushirish, to'xtatish, holatini tekshirish |
journalctl |
systemd yig'gan log'larni o'qish |
timedatectl |
Vaqt zonasi va soat sozlamalari (tafsilotlar Vaqt zonasi va locale sozlamalari maqolasida) |
localectl |
Til va locale sozlamalari (tafsilotlar Vaqt zonasi va locale sozlamalari maqolasida) |
hostnamectl |
Tizim hostname’ini boshqarish |
systemd-analyze |
Boot vaqti va unit bog'liqliklarini tahlil qilish |
Bu maqola systemctl ning faqat eng zarur qismlarini tanishtiradi — to'liq manzara systemd unitlari va targetlari va Xizmatlarni boshqarish maqolalarida ko'rib chiqiladi.
● ubuntu-server
State: running
Jobs: 0 queued
Failed: 0 units
Since: Fri 2026-07-24 08:12:03 UTC; 3h 40min ago
Argumentsiz ishga tushirilgan systemctl status tizimning umumiy holatini ko'rsatadi: nechta unit ishdan chiqqan, tizim qachon boot qilgan va uning joriy holati (running, degraded va hokazo).
Keng tarqalgan xatolar
systemd tizimida SysV init buyruqlarini ishlatish
service nginx restart yoki /etc/init.d/nginx restart kabi eski buyruqlar moslik uchun ko'p systemd tizimlarida hali ham ishlaydi (systemd ularni ichkarida systemctl chaqiruviga aylantiradi), lekin bu vaqtinchalik moslik qatlami. Batafsilroq xato xabarlari va kengaytirilgan imkoniyatlar (masalan, --now yoki bog'liqliklarni ko'rsatish) faqat to'g'ridan-to'g'ri systemctl orqali to'liq mavjud.
PID 1 ga oddiy jarayon sifatida qarash
PID 1 ni kill -9 1 bilan to'xtatishga urinish yoki uni boshqa yo'l bilan oddiy jarayon kabi boshqarish tizimni beqaror qilib qo'yishi yoki kernel panic’ga sabab bo'lishi mumkin. PID 1 bilan har qanday o'zaro ta’sir systemd ning o'z rasmiy vositalari (systemctl reboot, systemctl poweroff) orqali bo'lishi kerak.
"systemd" ni "systemctl" bilan adashtirish
systemd — PID 1 sifatida ishlaydigan daemon; systemctl esa shu daemon bilan muloqot qilish uchun ishlatiladigan klient buyrug'i. systemctl ni to'xtatish systemd ni to'xtatmaydi — u shunchaki boshqaruv vositasi.
Mashqlar
ps -p 1 -o pid,commvasystemctl --versionni ishga tushiring va har birining chiqishini tushuntiring.systemctl statuschiqishidagiState,JobsvaFailedmaydonlari nimani anglatishini o'z so'zlaringiz bilan tushuntiring.- SysV init’dagi 3-runlevel qaysi systemd target’iga mos kelishini eslang (javobni systemd unitlari va targetlari maqolasida tasdiqlaysiz).
man systemdni oching va "See Also" bo'limida nechta systemd komponenti (masalan,systemd-journald,systemd-logind) ro'yxatlanganini sanang.
Mashqni bajardim deyish uchun: hech narsaga qaramasdan PID 1 nima qilishini va nega uni to'g'ridan-to'g'ri o'ldirish xavfli ekanini ayta olishingiz kerak.
Xulosa
PID 1 — kernel ishga tushiradigan birinchi user-space jarayoni bo'lib, tizimda ishlaydigan qolgan hamma narsa uchun javobgar. SysV init’da bu vazifa ketma-ket, runlevel’larga asoslangan init ga tegishli edi; systemd uni parallel ishga tushirish, deklarativ bog'liqliklar va bitta izchil buyruqlar oilasi bilan almashtirdi, natijada boot vaqti qisqardi va boshqaruv soddalashdi. Keyingi maqola — systemd unitlari va targetlari systemd ning asosiy qurilish bloki — unit’ni va runlevel’lar o'rnini egallagan target mexanizmini batafsil ko'rib chiqadi.