Bosh sahifa Wiki Systemd

Systemd

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

  • unit;
  • PID;
  • user;
  • boot ID;
  • priority;
  • timestamp.

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:

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