Systemd — Linux tizimlarida init, service management va bir qator system funksiyalarini boshqaradigan dasturiy to‘plam.
Systemd asosiy process sifatida PID 1da ishlashi mumkin. U service’larni dependency asosida ishga tushiradi, cgroup orqali kuzatadi va tizim holatini unitlar yordamida ifodalaydi.
Systemd faqat service start-stop vositasi emas. Timer, socket activation, mount, device, log va session boshqaruvi bilan integratsiyalangan.
Unit
Systemd boshqaradigan obyekt unit deb ataladi.
Keng tarqalgan turlar:
.service;.socket;.timer;.target;.mount;.automount;.path;.device;.swap;.slice;.scope.
Har unit configuration fayliga ega bo‘lishi mumkin.
Service unit
Service fayli odatda uch bo‘limdan iborat.
[Unit]
Description=Example service
After=network.target
[Service]
ExecStart=/usr/local/bin/example
User=example
Restart=on-failure
[Install]
WantedBy=multi-user.target
Har direktiva aniq semantikaga ega.
Unit qidirish yo‘llari
Unitlar:
/usr/lib/systemd/system;/lib/systemd/system;/etc/systemd/system;- runtime kataloglar
ichida bo‘lishi mumkin.
Administrator override’lari /etcda saqlanadi.
Vendor faylni to‘g‘ridan-to‘g‘ri tahrir qilish package update’da yo‘qolishi mumkin.
Enable va start
start unitni hozir ishga tushiradi.
enable boot targetdan symbolic link yoki dependency yaratadi.
Enabled service darhol ishlayotgan bo‘lishi shart emas. Started service esa enabled bo‘lmasligi mumkin.
Dependency
Systemd dependency va orderingni alohida boshqaradi.
Requires— kuchli dependency;Wants— yumshoq dependency;After— keyin ishga tushish tartibi;Before— oldin;Conflicts— birga faol bo‘lmaslik.
After=network.target network internetga tayyorligini har doim kafolatlamaydi.
Target
Target unitlar guruhini ifodalaydi.
Misollar:
multi-user.target;graphical.target;rescue.target;emergency.target;network-online.target.
Default target bootda tanlanadi.
Service type
simple
ExecStart process asosiy service hisoblanadi.
exec
Executable muvaffaqiyatli ishga tushgani tekshiriladi.
forking
Daemon backgroundga fork qiladi. PID file kerak bo‘lishi mumkin.
oneshot
Qisqa vazifa bajaradi va tugaydi.
notify
Service sd_notify orqali tayyorligini bildiradi.
dbus
D-Bus nomi olinganda tayyor hisoblanadi.
Restart policy
Direktivalar:
Restart=no;on-failure;always;on-abnormal.
Qo‘shimcha:
RestartSec;- start rate limit;
- timeout.
Noto‘g‘ri service tez crash loopga tushmasligi kerak.
Cgroup
Systemd har service processlarini cgroup ichida kuzatadi.
Daemon child process yaratib PIDini o‘zgartirsa ham systemd butun guruhni biladi.
Stop paytida barcha processlar boshqariladi.
Resource control:
- CPUQuota;
- MemoryMax;
- TasksMax;
- IOWeight.
Journald
Service stdout va stderr outputi journalga tushishi mumkin.
Journal metadata:
Log binary journal formatda saqlanishi va text ko‘rinishda chiqarilishi mumkin.
Retention va disk limiti sozlanadi.
Socket activation
.socket unit port yoki Unix socketni oldindan ochadi.
Birinchi connection kelganda service ishga tushadi.
Service restart paytida socket managerda qolishi mumkin.
Bu on-demand service va parallel bootga yordam beradi.
Timer
.timer unit cron o‘rniga schedule beradi.
Turlari:
- calendar timer;
- monotonic timer;
- bootdan keyin;
- oxirgi ishga tushishdan keyin;
- persistent timer.
Timer tegishli service unitni faollashtiradi.
Path activation
.path unit fayl yoki katalog o‘zgarishini kuzatib service ishga tushiradi.
Bu barcha filesystem event uchun to‘liq event processing tizimi emas, ammo oddiy triggerlar uchun qulay.
Mount unit
/etc/fstab yozuvlari systemd mount unitlarga aylantirilishi mumkin.
Mount dependency boot jarayoniga integratsiyalanadi.
Remote filesystem network-online targetga bog‘lanishi mumkin.
Template unit
Bitta template ko‘p instance uchun ishlatiladi.
Misol:
[email protected]
[email protected]
[email protected]
%i instance nomiga almashtiriladi.
Drop-in override
Unitni to‘liq copy qilmasdan faqat kerakli direktiva override qilinadi.
Drop-in katalog:
example.service.d/override.conf
Bo‘sh assignment eski list qiymatini reset qilish uchun kerak bo‘lishi mumkin.
Environment
Service interaktiv shell profile’ini avtomatik olmaydi.
Environment:
Environment=;EnvironmentFile=;- credential API;
- explicit PATH
orqali beriladi.
Secret oddiy environmentda ko‘rinishi mumkin. systemd credential mexanizmi yoki secret manager ishlatiladi.
Security hardening
Direktivalar:
User;Group;NoNewPrivileges;PrivateTmp;ProtectSystem;ProtectHome;CapabilityBoundingSet;RestrictAddressFamilies;SystemCallFilter;ReadWritePaths.
Har bir setting application ehtiyojiga qarab test qilinadi.
Reload va daemon-reload
systemctl reload applicationga konfiguratsiyani qayta o‘qishni so‘raydi.
systemctl daemon-reload systemd managerga unit fayllarini qayta o‘qitadi.
Ular bir xil amal emas.
Diagnostika
Systemd service muammosida:
- unit status;
- journal;
- exit code;
- ExecStart path;
- user;
- environment;
- dependency;
- ordering;
- timeout;
- restart limit;
- cgroup;
- security sandbox
tekshiriladi.
active (exited) oneshot uchun normal, uzoq ishlaydigan daemon uchun esa service type xatosi bo‘lishi mumkin.
Service readiness
Process yaratilishi service foydalanuvchi so‘roviga tayyor degani emas.
Type=notify ishlatilganda application initialization tugagach systemdga READY=1 yuboradi. Dependency service shu paytdan keyin davom etishi mumkin.
Oddiy Type=simpleda systemd process ishga tushgan zahoti unitni active deb hisoblaydi.
Watchdog
Service systemdga ma’lum intervalda watchdog xabari yuboradi. Xabar to‘xtasa manager process qotgan deb hisoblab restart qilishi mumkin.
Watchdog interval applicationning normal eng uzun ishidan katta va real qotishni tez aniqlaydigan darajada tanlanadi.
Credential
Systemd credential API secretni unit fayli yoki umumiy environmentga yozmasdan service’ga berishga yordam beradi.
Credential runtime katalogdagi cheklangan fayl orqali taqdim etilishi va encrypted credential sifatida saqlanishi mumkin.
Transient unit
systemd-run orqali vaqtinchalik service yoki scope yaratish mumkin. Unga CPU, memory va user cheklovi qo‘llanadi.
Bu ad-hoc commandni boshqariladigan cgroup ichida ishga tushirish uchun qulay.
Bog‘liq tushunchalar
Init, PID 1, Unit, Service, Target, Timer, Socket activation, Cgroup, Journald, Systemctl