Linux’da ilovani systemd servis sifatida qanday ishga tushirish
Amaliyot3 daqInnovialabs tahririyati
Qisqacha
/etc/systemd/system ichida ExecStart, User, WorkingDirectory, EnvironmentFile va Restart=on-failure bilan unit fayl yarating, daemon-reload va enable --now bajaring, loglarni journalctl -u orqali ko‘ring.
Qisqa javob
Ilova fonda ishlashi, server bilan birga ishga tushishi va qulagandan keyin tiklanishi uchun uni systemd servis sifatida rasmiylashtiring:
/etc/systemd/system/myapp.servicefaylini yarating.- Ishga tushirish buyrug‘i, foydalanuvchi, ishchi papka va qayta ishga tushirish siyosatini ko‘rsating.
systemctl daemon-reloadvasystemctl enable --now myappbajaring.- Loglarni
journalctl -u myapporqali o‘qing.
nohup, screen yoki & orqali ishga tushirish qayta yuklashdan keyin saqlanmaydi va qulagan jarayonni qayta ishga tushirmaydi — systemd ikkala vazifani ham hal qiladi.
Unit fayl
[Unit]
Description=My web app
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=myapp
Group=myapp
WorkingDirectory=/opt/myapp
EnvironmentFile=/etc/myapp/env
ExecStart=/usr/bin/node /opt/myapp/server.js
Restart=on-failure
RestartSec=5
[Install]
WantedBy=multi-user.target
Asosiy parametrlarni ko‘rib chiqamiz.
Har bir parametr nimani anglatadi
[Unit]
- Description — tushunarli nom,
systemctl statusda ko‘rinadi. - After / Wants — tarmoq tayyor bo‘lgandan keyin ishga tushirish. Ilovaga shu serverdagi ma’lumotlar bazasi kerak bo‘lsa, uning servisini
After=ga qo‘shing.
[Service]
- ExecStart — absolyut yo‘llar bilan to‘liq ishga tushirish buyrug‘i. systemd shell’dagi
PATHingizdan foydalanmaydi. - User / Group — root huquqlarisiz alohida tizim foydalanuvchisi. Bunday yaratiladi:
sudo useradd --system --no-create-home myapp. - WorkingDirectory — ilova nisbiy fayllarni qidiradigan papka.
- EnvironmentFile —
KEY=valueqatorlari bo‘lgan fayl. Secret’larni unit faylning o‘zida emas, shu yerda600huquqlari bilan saqlang. Bir-ikkita maxfiy bo‘lmagan qiymat uchunEnvironment=yetarli. - Restart — qayta ishga tushirish siyosati.
- RestartSec — tez qulash siklini oldini olish uchun qayta ishga tushirishdan oldingi pauza.
[Install]
- WantedBy=multi-user.target — tizimning oddiy yuklanishida ishga tushirish.
Qayta ishga tushirish siyosatlari
| Qiymat | Qachon qayta ishga tushiradi |
|---|---|
no | hech qachon |
on-failure | noldan farqli chiqish kodi, signal, timeout |
always | har doim, hatto normal tugagandan keyin ham |
Veb-servislar uchun odatda on-failure yoki always tanlanadi. Jarayon juda tez-tez qulasa, systemd uni qayta ishga tushirishni to‘xtatadi — buni [Unit] bo‘limidagi StartLimitIntervalSec va StartLimitBurst boshqaradi.
Servisni boshqarish
sudo systemctl daemon-reload # unit fayl har o‘zgarganda
sudo systemctl enable --now myapp # avtostart + hozir ishga tushirish
sudo systemctl status myapp
sudo systemctl restart myapp
sudo systemctl stop myapp
journalctl orqali loglar
Ilova stdout va stderr’ga yozgan hamma narsa jurnalga tushadi:
journalctl -u myapp -f # real vaqtda kuzatish
journalctl -u myapp -n 100 # oxirgi 100 qator
journalctl -u myapp --since "1 hour ago"
journalctl -u myapp -p err # faqat xatolar
Loglarni stdout’ga yozing — shunda alohida log fayllar va ularning rotatsiyasi kerak bo‘lmaydi.
Ko‘p uchraydigan xatolar
daemon-reloadunutilgan — systemd faylning eski versiyasidan foydalanishda davom etadi.ExecStartdagi nisbiy yo‘llar — servis «not found» xatosi bilan tushadi.- Zaruratsiz root ostida ishga tushirish.
- Secret’lar to‘g‘ridan-to‘g‘ri unit faylda — uni tizimning istalgan foydalanuvchisi o‘qiy oladi.
Type=simplebo‘lganda ilova o‘zi fonga o‘tadi (daemonize) — systemd jarayon tugadi deb hisoblaydi. Ilovani foreground rejimida ishga tushiring.
Parametrlarning to‘liq ro‘yxati — systemd.service hujjatlarida.