Անցնել պարունակությանը

Բոտի աշխատեցումը ֆոնային ռեժիմում

Այս հոդվածում

Python-ի (կամ ցանկացած այլ) բոտը անընդհատ աշխատեցնելու, սխալների դեպքում ավտոմատ վերականգնելու և սերվերի վերագործարկումից հետո մեկնարկելու համար պարզապես python main.py հրամանը բավարար չէ։ Ձեզ անհրաժեշտ է ամբողջական ֆոնային ծառայություն։

Ստորև ներկայացված են երեք ապացուցված մեթոդներ՝ պարզ screen-ից մինչև արդյունաբերական մակարդակի systemd։ Ընտրեք՝ հիմնվելով ձեր պահանջների վրա։

Միջավայրի պատրաստում

  1. Տեղադրեք բոտի կոդը, օրինակ՝ /home/user/bot հասցեում.

    mkdir -p /home/user/bot && cd /home/user/bot
    

  2. Ստեղծեք և ակտիվացրեք վիրտուալ միջավայր կախվածությունները մեկուսացնելու համար.

    python3 -m venv venv
    source venv/bin/activate
    

  3. Ինստալացրեք կախվածությունները.

    pip install -r requirements.txt
    # Եթե ֆայլը գոյություն չունի՝ ինստալացրեք ձեռքով, օրինակ՝ pip install python-telegram-bot
    

  4. Ստուգեք ձեռքով մեկնարկը.

    python main.py
    

Նշում

Մի աշխատեցրեք բոտը root օգտատերով, եթե դա անհրաժեշտ չէ։ Ավելի լավ է ստեղծել նվիրված օգտատեր.

sudo adduser --disabled-login botuser
sudo chown -R botuser:botuser /home/user/bot

Մեթոդ 1. screen — արագ մեկնարկ (թեստավորման և զարգացման համար)

Առավելություններ. ամենահեշտ մեկնարկը։
Թերություններ. չի վերականգնվում անկումից կամ վերագործարկումից հետո — հարմար չէ production-ի համար։

Ինստալացիա.

sudo apt update && sudo apt install screen -y

Մեկնարկ.

screen -S bot  # ստեղծել անվանված սեսիա
source venv/bin/activate
python main.py

Կառավարում.

Գործողություն Հրաման
Միացնել սեսիայից (թողնել ֆոնում) Ctrl + A, ապա D
Դիտել սեսիաների ցանկը screen -ls
Վերադառնալ սեսիա screen -r bot
Վերջացնել սեսիան ներսից Ctrl + A, ապա K > Y

Տեղեկատվություն

Սերվերի վերագործարկումից կամ սկրիպտի անկումից հետո բոտը կմնի կանգնած։ Օգտագործեք միայն ժամանակավոր առաջադրանքների համար։

Մեթոդ 2. systemd — Linux-ի ստանդարտ ծառայությունների համար (հեշտացված)

Առավելություններ. ավտոմատ մեկնարկ, վերականգնում սխալների դեպքում, օրագրավորում, համակարգային ինտեգրում։
Թերություններ. պահանջում է կոնֆիգուրացիայի գրել։

  1. Ստեղծեք unit ֆայլ.

    sudo nano /etc/systemd/system/bot.service
    

  2. Տեղադրեք կոնֆիգուրացիան (հարմարեցրեք ուղիները և օգտատիրոջը!).

    [Unit]
    Description=Telegram Bot Service
    After=network.target
    StartLimitIntervalSec=30
    StartLimitBurst=5
    
    
    [Service]
    Type=simple
    User=botuser                 # ← խորհուրդ չի տրվում root!
    Group=botuser
    WorkingDirectory=/home/user/bot
    ExecStart=/home/user/bot/venv/bin/python /home/user/bot/main.py
    Restart=always
    RestartSec=10
    Environment="PYTHONUNBUFFERED=1"  # որպեսզի օրագրերը բուֆերավորված չլինեն
    
    
    # Անվտանգություն (ընտրովի, բայց խորհուրդ է տրվում)
    NoNewPrivileges=true
    PrivateTmp=true
    ProtectSystem=strict
    ProtectHome=true
    ReadWritePaths=/home/user/bot/data/  # եթե բոտը տվյալներին մուտքի կարիք ունի
    
    
    [Install]
    WantedBy=multi-user.target
    

  3. Ակտիվացրեք ծառայությունը.

    sudo systemctl daemon-reload
    sudo systemctl enable bot.service   # ավտոմատ մեկնարկ boot-ի ժամանակ
    sudo systemctl start bot.service    # մեկնարկել հիմա
    

  4. Ստուգեք կարգավիճակը և օրագրերը.

    sudo systemctl status bot.service
    journalctl -u bot.service -f --since "1 hour ago"
    

Անվտանգության խորհուրդներ

Մեկուսացրեք ծառայությունը համակարգի անհրաժեշտ չլինող մասերին մուտքից (միջոցով ProtectSystem, ReadOnlyPaths); Եթե բոտը միայն ինտերնետի կարիք ունի՝ ավելացրեք RestrictNetwork=true և կոնֆիգուրացրեք IPAddressAllow=...; Օգտագործեք RuntimeDirectory= ժամանակավոր ֆայլերի համար։

Մեթոդ 3. PM2 — պրոցեսների կառավարիչ (Node.js-ի համար, բայց աջակցում է Python-ին)

Առավելություններ. պարզություն, ներկառուցված օրագրեր, մոնիտորինգ, վեբ ինտերֆեյս։
Թերություններ. պահանջում է Node.js, չափազանց շատ պարզ Python բոտների համար։

Ինստալացիա.

# Ինստալացրեք Node.js և npm (եթե դեռ չի ինստալացված)
curl -fsSL https://deb.nodesource.com/setup_lts.x | sudo -E bash -
sudo apt install -y nodejs


# Ինստալացրեք PM2 գլոբալ
sudo npm install -g pm2

Մեկնարկեք Python բոտը.

cd /home/user/bot
pm2 start main.py --name "my-bot" --interpreter ./venv/bin/python

Օգտակար հրամաններ.

Հրաման Նպատակ
pm2 list Պրոցեսների ցանկ
pm2 logs my-bot Դիտել օրագրերը
pm2 monit Ռեալ ժամանակի մոնիտորինգ
pm2 startup Կոնֆիգուրացնել ավտոմատ մեկնարկը վերագործարկումից հետո
pm2 save Պահպանել ընթացիկ պրոցեսները

Տեղեկատվություն

pm2 startup-ից հետո հետևեք տերմինալի հրահանգներին — PM2-ն կստեղծի systemd unit ավտոմատ մեկնարկի համար։

Մեթոդների համեմատություն

Չափանիշ screen systemd PM2
Ավտոմատ մեկնարկ վերագործարկումից հետո Ոչ Այո Այո (պահանջում է pm2 startup)
Վերականգնում անկումի դեպքում Ոչ Այո Այո
Օրագրավորում Միայն սեսիայում journalctl Ներկառուցված օրագրեր
Անվտանգություն Ցածր Բարձր (մեկուսացման կարգավորումներ) Միջին
Կոնֆիգուրացիայի բարդություն Ցածր Միջին Ցածր (բայց պահանջում է Node.js)
Հարմար է production-ի համար Ոչ Խորհուրդ է տրվում Այո (եթե արդեն օգտագործում եք Node.js)

Լրացուցիչ

Կազմակերպեք զգուշացումներ, երբ բոտը կանգ է առնում (օրինակ՝ systemd + healthchecks.io միջոցով);
Պարբերաբար թարմացրեք կախվածությունները pip list --outdated;
Օգտագործեք .env ֆայլեր և python-dotenv տոկենները պահպանելու համար (և բացառեք դրանք Git-ից!)։

question_mark
Is there anything I can help you with?
question_mark
AI Assistant ×