Скрипт Python на веб-сервере Ubuntu 16.04 через некоторое время перестает работать - PullRequest
0 голосов
/ 25 ноября 2018

Я установил 3 скрипта Python для бота телеграммы.

Один - это библиотека, которая определяет используемые методы:

import requests
import json
import configparser as cfg

class telegram_chatbot():

    def __init__(self, config):
    self.token = self.read_token_from_config_file(config)
    self.base = "https://api.telegram.org/bot{}/".format(self.token)

    def get_updates(self, offset=None):
    url = self.base + "getUpdates?timeout=100"
    if offset:
        url = url + "&offset={}".format(offset + 1)
    r = requests.get(url)
    return json.loads(r.content)

    def send_message(self, msg, chat_id):
    url = self.base + "sendMessage?chat_id={}&text={}".format(chat_id, msg)
    if msg is not None:
        requests.get(url)

    def read_token_from_config_file(self, config):
    parser = cfg.ConfigParser()
    parser.read(config)
    return parser.get('creds', 'token')

Второй слушает ввод пользователя и затем отвечает на сообщение:

from bot import telegram_chatbot
import csv

bot = telegram_chatbot("config.cfg")

print("bot started...")

def make_reply(msg):
    reply = ""
    if msg is not None and msg == "/naechsteaufgabe":
        string = ", "
        with open("Marketing-Plan.csv", "r") as csvfile:
            reader = csv.reader(csvfile, delimiter = ";")
            next(reader)
            for row in reader:
                if row[6] != "erledigt":
                    string = string.join(row)
                    reply = string
                    return reply

    elif msg is not None and msg == "/hilfe":
        reply = "text"
        return reply

    if msg is not None and msg == "/aufgaben":
        with open("Marketing-Plan.csv", "r") as csvfile:
            reader = csv.reader(csvfile, delimiter = ";")
            next(reader)
            list = [x for x in reader if x[6] == "mussnoch"]
            string = ""
            for entry in list:
                string = string + " ".join(entry) + "\n"
            reply = string
            if reply == "" or reply == None:
                reply = "Error"
                return reply
            return reply


update_id = None
while True:
    updates = bot.get_updates(offset=update_id)
    updates = updates["result"]
    if updates:
        for item in updates:
            update_id = item["update_id"]
            try:
                message = str(item["message"]["text"])
            except:
                message = None
            from_ = item["message"]["chat"]["id"]
            reply = make_reply(message)
            bot.send_message(reply, from_)

и третий скрипт должен создавать сообщение и отправлять его в группе каждые 24 часа:

import time
from bot import telegram_chatbot
import csv
bot = telegram_chatbot("config.cfg")

starttime=time.time()

def make_reminder():
    with open("Marketing-Plan.csv", "r") as csvfile:
        string = ", "
        reader = csv.reader(csvfile, delimiter = ";")
        next(reader)
        for row in reader:
            if row[6] != "erledigt":
                string = string.join(row)
                return string


while True:
    bot.send_message(make_reminder(), "somechatid")
    print("tick")
    time.sleep(86400.0 - ((time.time() - starttime) % 86400.0))

Эти скрипты запускаются на моем веб-сервере Ubuntu 16.04, но через некоторое время (~ 24h) скрипты, похоже, останавливаются, потому что бот больше не отвечает на ввод пользователя.

Как и почему это происходит?Как я могу изменить это, чтобы бот работал 24/7?

...