🤖
Hosting

Python botni 24/7 ishlatish: systemd va PM2 bilan barqaror ishga tushirish

09.11.2026
← Barcha maqolalar

Ko'pchilik Python botini birinchi marta serverga joylaganda uni SSH orqali python3 bot.py buyrug'i bilan ishga tushiradi va hammasi ishlayotganini ko'rib xursand bo'ladi. Ammo terminal oynasi yopilishi bilan yoki SSH ulanish uzilishi bilan bot ham to'xtaydi. Undan keyin nohup yoki screen sinab ko'riladi, lekin server qayta yuklanganda yoki bot xato bilan yiqilganda uni hech kim qayta ishga tushirmaydi. Botni haqiqatan ham kecha-kunduz ishlatish uchun uni operatsion tizim boshqaradigan xizmatga aylantirish kerak.

Nega oddiy hosting bunga mos emas

Oddiy shared hosting asosan PHP saytlar uchun mo'ljallangan: so'rov keladi, skript ishlaydi va tugaydi. Doimiy ishlab turadigan jarayonlar bunday muhitda odatda resurs cheklovlari yoki tizim tomonidan to'xtatiladi, cron orqali "tirik ushlash" urinishlari ham ishonchli natija bermaydi. Shuning uchun 24/7 ishlashi kerak bo'lgan bot uchun root huquqi bor VPS eng to'g'ri tanlov hisoblanadi. VPS'da siz o'zingiz systemd xizmatini yaratasiz va bot tizim bilan birga ishga tushadi.

Botni tayyorlash: alohida foydalanuvchi va virtual muhit

Botni root nomidan ishlatish xavfsizlik nuqtai nazaridan yomon odat. Yaxshisi, bot uchun alohida tizim foydalanuvchisi yaratib, kodni uning papkasiga joylashtiring. Kutubxonalarni tizim Python'iga emas, virtual muhitga o'rnating, shunda boshqa loyihalar bilan versiya to'qnashuvi bo'lmaydi.

sudo adduser --system --group --home /opt/mybot mybot
sudo -u mybot python3 -m venv /opt/mybot/venv
sudo -u mybot /opt/mybot/venv/bin/pip install -r /opt/mybot/requirements.txt

Bot tokeni kabi maxfiy ma'lumotlarni kod ichiga yozmang. Ularni alohida .env faylda saqlang va faylga faqat bot foydalanuvchisi o'qiy oladigan huquq bering. Bu token tasodifan GitHub'ga yuklanib ketishidan ham himoya qiladi.

sudo nano /opt/mybot/.env
# BOT_TOKEN=123456:ABC...
sudo chown mybot:mybot /opt/mybot/.env
sudo chmod 600 /opt/mybot/.env

systemd xizmatini yaratish

systemd zamonaviy Linux tizimlarida xizmatlarni boshqaruvchi asosiy vosita. U jarayonni ishga tushiradi, yiqilsa qayta ko'taradi, server yuklanganda avtomatik yoqadi va barcha chiqishni jurnalga yozadi. Buning uchun bitta unit fayl yozish kifoya.

sudo nano /etc/systemd/system/mybot.service
[Unit]
Description=Telegram bot (mybot)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=mybot
WorkingDirectory=/opt/mybot
EnvironmentFile=/opt/mybot/.env
ExecStart=/opt/mybot/venv/bin/python -u bot.py
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

Bu yerda Restart=always bot qaysi sabab bilan to'xtamasin, besh soniyadan keyin uni qayta ishga tushiradi. -u bayrog'i Python chiqishini buferlamaydi, shuning uchun loglar jurnalda darhol ko'rinadi. Fayl tayyor bo'lgach, systemd'ga yangi xizmat haqida xabar beriladi va u yoqiladi.

sudo systemctl daemon-reload
sudo systemctl enable --now mybot
systemctl status mybot

Loglarni kuzatish

Bot nima qilayotganini bilish uchun alohida log fayl yaratish shart emas, chunki systemd barcha chiqishni jurnalga yig'adi. Quyidagi buyruqlar oxirgi yozuvlarni ko'rsatadi yoki yangi yozuvlarni jonli kuzatib boradi. Kodni yangilaganingizdan keyin xizmatni qayta ishga tushirish ham bitta buyruq bilan bajariladi.

journalctl -u mybot -n 100
journalctl -u mybot -f
sudo systemctl restart mybot

PM2 bilan ishlatish varianti

PM2 aslida Node.js uchun yaratilgan jarayon menejeri, lekin u Python skriptlarini ham bemalol boshqaradi. Agar serverda allaqachon Node.js loyihalari PM2 orqali ishlayotgan bo'lsa, barcha jarayonlarni bitta ro'yxatda ko'rish qulay. PM2 o'rnatish uchun serverda Node.js va npm bo'lishi kerak.

sudo npm install -g pm2
cd /opt/mybot
pm2 start bot.py --name mybot --interpreter /opt/mybot/venv/bin/python
pm2 save
pm2 startup

pm2 startup buyrug'i ekranga bitta sudo buyrug'ini chiqaradi, uni nusxalab bajarish kerak, aks holda server qayta yuklanganda PM2 o'zi ishga tushmaydi. pm2 save esa joriy jarayonlar ro'yxatini saqlab qo'yadi. Keyinchalik pm2 logs mybot bilan loglarni, pm2 restart mybot bilan qayta ishga tushirishni boshqarasiz.

systemd yoki PM2: qaysi birini tanlash

MezonsystemdPM2
Qo'shimcha o'rnatishKerak emas, tizimda borNode.js va npm kerak
Loglarjournalctlpm2 logs, ~/.pm2/logs
Bir nechta jarayonni ko'rishsystemctl list-unitspm2 list, pm2 monit
Kimga qulayFaqat Python loyihalariNode.js bilan aralash serverlar

Faqat bitta yoki ikkita Python bot bo'lsa, systemd ortiqcha bog'liqliksiz eng sodda va ishonchli yo'l. PM2 esa ko'p loyihani bitta panel orqali kuzatishni xohlaganlar uchun qulay.

Amaliy misol: Toshkentdagi gul do'koni boti

Faraz qilaylik, Toshkentdagi gul do'koni buyurtmalarni Telegram bot orqali qabul qiladi va har bir buyurtmani misol.uz saytidagi bazaga yozadi. Bot oldin dasturchining noutbukida ishlagan va kechasi noutbuk yopilganda buyurtmalar yo'qolgan. Botni kichik VPS'ga ko'chirib, yuqoridagi systemd xizmati bilan ishga tushirgandan keyin u server bilan birga yonadi, tarmoq uzilib xato bersa, besh soniyada qayta ko'tariladi. Do'kon egasi muammo bo'lganda journalctl -u mybot orqali aniq xato matnini ko'rib, dasturchiga yuboradi.

Tez-tez uchraydigan xatolar

Bot uchun server kerak bo'lsa, sayt.uz kabinetidan VPS buyurtma qilib, unda yuqoridagi sozlamalarni bir necha daqiqada bajarishingiz mumkin. Asosiysi, bot terminalga emas, tizimga bog'langan bo'lishi kerak.

O'xshash maqolalar

🧠 Xotira yetmasligi (OOM): PHP va Python jarayonlari nega o'ldiriladi 🧠 "Allowed memory size exhausted": PHP xotira xatosi va uni to'g'ri hal qilish 🚀 To'liq sahifa keshi: qachon foydali va qachon xalaqit beradi ⚡ FastAPI'ni serverga joylash: Uvicorn, systemd va Nginx bilan ishonchli deploy
🌐 Til
🇺🇿 O'zbek ✓ 🇺🇿 Ўзбек 🇷🇺 Русский 🇬🇧 English