Xizmatlarni boshqarish
systemd unitlari va targetlari maqolasida unit fayllari qanday tuzilgani va ular bir-biriga qanday bog'liqligi ko'rib chiqildi. Endi bu bilimni kundalik amaliyotga qo'llash vaqti keldi: .service unit’larini ishga tushirish, to'xtatish, boot paytida yoqish va ularning joriy holatini tekshirish. Bu Linux administratori eng ko'p bajaradigan vazifalardan biri: veb-server, ma’lumotlar bazasi yoki o'zingizning backend ilovangiz — hammasi aynan bir xil buyruqlar to'plami orqali boshqariladi.
Nimalarni o'rganasiz
Bu maqola oxirida siz quyidagilarni qila olasiz:
systemctl start/stop/restart/reloado'rtasidagi farqni tushuntirish;enable/disablebilan boot paytida avtomatik ishga tushishni sozlash;systemctl statuschiqishidagi har bir maydonni o'qish;is-active,is-enabled,is-failedkabi skript uchun qulay tekshiruvlardan foydalanish;mask/unmasknega mavjudligini va udisabledan qanday farq qilishini tushuntirish.
Xizmatni ishga tushirish, to'xtatish va qayta ishga tushirish
Bu uchtasi o'z-o'zidan tushunarli: start xizmatni ishga tushiradi, stop uni to'xtatadi, restart esa uni butunlay to'xtatib, qayta ishga tushiradi. restart konfiguratsiyasini ishga tushishda o'qiydigan har qanday xizmat uchun ishlaydi, lekin u jarayonni qayta yaratishdan oldin butunlay o'ldirgani uchun xizmat bir lahzaga bo'lsa ham mavjud bo'lmay qoladi.
reload esa aksincha, xizmatni to'xtatmasdan uni konfiguratsiyasini qayta o'qishga majbur qiladi. Agar xizmat buni qo'llab-quvvatlasa, bu konfiguratsiya o'zgarishini uzilishsiz qo'llashning standart usuli. Har bir xizmat ham reload ni qo'llab-quvvatlamaydi; bunday holatda systemctl reload nginx darhol xato beradi va buning o'rniga restart ishlatishga to'g'ri keladi.
Tip
Xizmat reload ni qo'llab-quvvatlashi aniq bo'lmasa, systemctl reload-or-restart nginx xavfsiz tanlov — u avval reload ni sinab ko'radi, imkoni bo'lmasa restart ga o'tadi.
Boot paytida avtomatik ishga tushirish: enable va disable
start/stop faqat joriy sessiyaga ta’sir qiladi — qayta yuklashdan keyin xizmat avvalgi holatiga qaytadi. Xizmat har bir boot’da avtomatik ishga tushishi alohida buyruqlar juftligi bilan boshqariladi:
enable systemd unitlari va targetlari maqolasida ko'rilgan unit fayli [Install] bo'limidagi WantedBy= qiymatiga asoslanib, tegishli target katalogida (masalan, /etc/systemd/system/multi-user.target.wants/) symlink yaratadi. disable esa shu symlink’ni olib tashlaydi.
enable va start ikki mustaqil amal, ya’ni to'rt xil birikma bo'lishi mumkin:
| Holat | Yoqilganmi? | Hozir ishlayaptimi? |
|---|---|---|
| Yangi o'rnatilgan, hali sozlanmagan | Yo'q | Yo'q |
| Faqat sinab ko'rish uchun qo'lda ishga tushirilgan | Yo'q | Ha |
| Boot uchun yoqilgan, lekin hali qayta yuklanmagan | Ha | Yo'q |
| To'liq ishlayotgan, production holati | Ha | Ha |
Ikkalasini birdaniga bajarishning qulay qisqa shakli:
Bu enable va start ni bitta chaqiruvda bajaradi. Yangi xizmatni sozlashda eng ko'p ishlatiladigan shakl shu va O'z systemd xizmatini yaratish maqolasida ham aynan shu andoza ishlatiladi.
Xizmat holatini tekshirish
● nginx.service - A high performance web server and reverse proxy server
Loaded: loaded (/lib/systemd/system/nginx.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-07-24 09:02:11 UTC; 1h 20min ago
Docs: man:nginx(8)
Main PID: 1842 (nginx)
Tasks: 3 (limit: 4665)
Memory: 4.2M
CPU: 128ms
CGroup: /system.slice/nginx.service
├─1842 "nginx: master process /usr/sbin/nginx"
└─1843 "nginx: worker process"
Muhim maydonlar:
- Loaded — unit fayli topilganmi va uning
enabled/disabledholati; - Active — asosiy holat (
active,inactive,failed) va qavs ichidagi batafsilroq holat (running,exited,dead); - Main PID — xizmatning asosiy jarayon identifikatori;
- CGroup — xizmatga tegishli barcha jarayonlar, ya’ni /proc fayl tizimi maqolasida ko'rilgan jarayonlar daraxtining systemd darajasidagi ko'rinishi.
systemctl status oxirgi bir nechta log qatorini ham ko'rsatadi, lekin to'liq tarix journalctl maqolasida ko'riladigan maxsus vosita bilan o'qiladi.
Skript uchun qulay holat tekshiruvlari
Avtomatlashtirilgan skriptga faqat chiqish kodi kerak bo'lganda interaktiv status o'rniga quyidagilar qulayroq:
| Buyruq | Nima qaytaradi |
|---|---|
systemctl is-active <unit> |
active/inactive/failed va unga mos chiqish kodi |
systemctl is-enabled <unit> |
enabled/disabled va unga mos chiqish kodi |
systemctl is-failed <unit> |
Unit failed holatida bo'lsa 0, aks holda 1 qaytaradi |
Bu buyruqlar Bash skript asoslari modulida ko'riladigan health-check va monitoring skriptlarining asosiy qurilish bloki — chiqish kodi if systemctl is-active --quiet nginx; then ... fi kabi shartlarni yozish imkonini beradi.
mask va unmask: disable dan kuchliroq
disable faqat avtomatik ishga tushishni o'chiradi — xizmatni baribir systemctl start bilan qo'lda ishga tushirish mumkin. mask esa unit faylini /dev/null ga symlink qiladi, shuning uchun uni umuman — na qo'lda, na boshqa unit’ning bog'liqligi sifatida — ishga tushirib bo'lmaydi:
To'siqni olib tashlash:
mask odatda ikki xizmat haqiqatan ziddiyatga kirganda (masalan, bitta serverda apache2 va nginx ikkalasi ham bitta port’ni band qilishga urinsa) yoki xavfsizlik siyosati muayyan xizmatni butunlay to'sib qo'yishni talab qilganda ishlatiladi.
Keng tarqalgan xatolar
Xizmatni yoqib, uni ishga tushirishni unutish
Xizmat yoqilgan, lekin hali ishlamayapti — chunki enable faqat keyingi boot’ga ta’sir qiladi. Uni darhol ishga tushirish uchun enable --now yoki alohida start dan foydalaning.
restart va reload ni adashtirish
Yuqori trafikli production xizmatida oddiy konfiguratsiya o'zgarishi uchun restart ishlatish, xizmat aslida reload ni qo'llab-quvvatlasa ham, qisqa uzilishga sabab bo'ladi. Imkoni boricha reload yoki reload-or-restart ni afzal ko'ring.
disable ni mask bilan adashtirish
disable qilingan xizmatni boshqa unit baribir bog'liqlik sifatida (masalan, Requires= orqali) ishga tushirishi mumkin. Agar xizmat hech qanday sharoitda hech qachon ishga tushmasligi kerak bo'lsa, mask dan foydalaning.
[Install] bo'limi yo'q unit’ni enable qilishga urinish
The unit files have no installation config (WantedBy=, RequiredBy=, Also=, Alias=
settings in the [Install] section, and DefaultInstance= for template units).
enable unit’ning [Install] bo'limidagi WantedBy=/RequiredBy= tasvirlagan symlink’ni yaratish orqali ishlaydi. Bunday bo'limi bo'lmagan unit’ni shunchaki yoqib bo'lmaydi va buyruq indamay hech narsa qilmasdan qolmaydi, yuqoridagi xabar bilan xato beradi. Yechim — [Install] bo'limini qo'shish (O'z systemd xizmatini yaratish maqolasiga qarang). Faqat boshqa unit’ning bog'liqligi sifatida chaqiriladigan unit’da [Install] bo'limi bo'lmasligi qonuniy va uni to'g'ridan-to'g'ri yoqish mo'ljallanmagan.
Mashqlar
- Sinov VM’ida mavjud xizmatni (masalan,
cron)stop,status,startorqali o'tkazing va har bir qadamdaActivemaydoni qanday o'zgarishini kuzating. - Xuddi shu xizmatni
disableqiling, qayta yuklang (yokisystemctl daemon-reloadbilan simulyatsiya qiling) vais-enabled/is-activenatijalari qanday farq qilishini tushuntiring. - Zararsiz xizmatni
maskqiling, unistartqilishga urinib, xato xabarini o'qing, so'ngunmaskbilan ortga qaytaring. systemctl is-active --quiet nginx && echo "running" || echo "not running"kabi shart yozing vais-activening chiqish kodi amalda qanday ishlatilishini kuzating.
Mashqni bajardim deyish uchun: yuqoridagi jadvaldagi to'rtta yoqilgan/ishlayotgan birikmasining har biridagi xizmat uchun uni boshqa birikmaga aynan qaysi buyruq o'tkazishini ayta olishingiz kerak.
Xulosa
start/stop/restart/reload xizmatning joriy holatini, enable/disable esa uning boot paytida avtomatik ishga tushishini boshqaradi — bular ikki mustaqil o'lchov bo'lib, ko'pincha enable --now bilan birlashtiriladi. systemctl status batafsil ko'rinishni beradi, is-active/is-enabled/is-failed esa skriptlar uchun qisqa, chiqish kodiga qulay tekshiruvlarni taqdim etadi. mask disable dan farqli o'laroq, xizmatning har qanday yo'l bilan ishga tushishini to'sib qo'yadi. Keyingi maqola — O'z systemd xizmatini yaratish xuddi shu buyruqlarni mavjud xizmatga emas, o'zingiz yozadigan yangi .service fayliga qo'llaydi.