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

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

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

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

Ստևր ներկայացված են երեք փորձված մեթոդներ՝ պարզ 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-ի ստանդարտ ծառայությունների համար (խորհուրդ տրվող)

Առավելություններ: ավտոմատ մեկնարկ, վերագործարկում սխալների դեպքում, լոգերի (logging) առկայություն, համակարգային ինտեգրում:
Թերություններ: պահանջում է կոնֆիգուրացիայի գրում:

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

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

  2. Տեղադրեք կոնֆիգուրացիան (փոխեք paths և user փոփոխականները!):

    [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"  # որպեսզի լոգերը չհատնվեն (buffered)
    
    # Անվտանգություն (ընտվիրական, բայց խորհուրդ է տրվում)
    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   # ավտոմատ մեկնարկ սերվերի բեռնման ժամանակ
    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

Մեկնարկ.

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)
Վերագործարկում անկումից հետո Ոչ Այո Այո
Լոգեր (Logging) Միայն սեսիայում journalctl Ներկառուցված լոգեր
Անվտանգություն Ցածր Բարձր (isolation settings) Միջին
Կոնֆիգուրացիայի բարդություն Ցածր Միջին Ցածր (բայց պահանջում է 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 ×